上QQ阅读APP看书,第一时间看更新
3.6 调试
这里通过设置一些错误让读者认识在编写代码过程中的常见问题,以帮助读者熟悉和解决实际遇到的问题。
(1)对序列中的元素进行访问时,输入序列中不存在的编号,如在greeting='Hello'示例中输入greeting[10],会得到什么结果?输入greeting[-10]又会得到什么结果?在交互模式下进行验证:
>>> greeting='hello' >>> len(greeting) #获取字符串长度 5 >>> greeting[10] #编号超过最大长度编号 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range >>> greeting[5] #字符串长度为5,但最大编号不是5 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range >>> greeting[len(greeting)-1] #最大编号是字符串长度减1 'o' >>> greeting[-10] Traceback (most recent call last): File "<stdin>", line 1, in <module> 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 "<stdin>", line 1, in <module> NameError: name 'a' is not defined >>> max('a','b','c') 'c'
第一个输出错误信息,因为a、b、c没有定义,这个操作要注意字符串的表示形式。第二个输出结果为c,max不但能操作数字,而且能操作字符,字符按字典排序取值。