Python3.5从零开始学
上QQ阅读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不但能操作数字,而且能操作字符,字符按字典排序取值。