购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.5 调试

这里通过设置的一些错误让读者认识在编写代码过程中的常见问题,以帮助读者熟悉和解决实际遇到的问题。

(1)对序列中的元素进行访问时,输入序列中不存在的编号,如在greeting='Hello'示例中输入greeting[10],会得到什么结果?输入greeting[-10]又会得到什么结果?在交互模式下进行验证:

>>> greeting='hello'
>>> len(greeting) #获取字符串长度
5
>>> greeting[10]   #编号超过最大长度编号
Traceback (most recent call last):
  File "<pyshell#92>", line 1, in <module>
    greeting[10]
IndexError: string index out of range
>>> greeting[5] #字符串长度为5,但最大编号不是5
Traceback (most recent call last):
  File "<pyshell#97>", line 1, in <module>
    greeting[5]
IndexError: string index out of range
>>> greeting[len(greeting)-1] #最大编号是字符串长度减1
'o'
>>> greeting[-10]
Traceback (most recent call last):
  File "<pyshell#95>", line 1, in <module>
    greeting[-10]
IndexError: string index out of range
>>> greeting[-1]
'o'
>>> greeting[-5]
'h'

从以上输出结果看出,以正数索引时,编号从0开始,最后一个元素的编号是len(str)-1;以负数索引时,从-1开始,可以取到-len(str)的元素。

当索引超出范围时,Python会报一个IndexError错误,即索引越界错误。要确保索引不越界,记得最后一个元素的索引是len(str) - 1。

(2)分片操作中,索引值大于列表的最大编号时,操作会报错吗?结果是怎样的?在交互模式输入如下:

>>> number=[1,2,3,4,5,6,7,8,9,10]
>>> number[7:15]
[8, 9, 10]
>>> number[-100:-1]
[1, 2, 3, 4, 5, 6, 7, 8, 9] #最后一个元素没有取到

由以上操作结果看到没有报错,并且超出部分没有输出任何内容。这里要声明一点:分片操作不存在索引越界的问题,分片操作对不存在的编号返回空值,存在的就返回对应值。所以number[7:15]返回[8, 9, 10],number[-100:-1]返回[1, 2, 3, 4, 5, 6, 7, 8, 9]。

(3)输入以下代码会得到什么结果?

>>> max(a,b,c)
Traceback (most recent call last):
  File "<pyshell#114>", line 1, in <module>
    max(a,b,c)
NameError: name 'a' is not defined
>>> max('a','b','c')
'c'

第一个输出错误信息,因为a、b、c没有定义,这个操作要注意字符串的表示形式。第二个输出结果为c,max不但能操作数字,而且能操作字符,字符按字典排序取值。 imV3kemThnoQcqc71Rm1fQgwGTpqEGFGuugaMNsB7U8m5Q6ishLPLtvdIUDsb0sh

点击中间区域
呼出菜单
上一章
目录
下一章
×