Python3.5从零开始学
上QQ阅读APP看书,第一时间看更新

4.4 调试

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

(1)使用格式化整数的占位符格式化字符串,例如:

        >>> print ('hello, %d' % 'world')
        Traceback (most recent call last):
          File "<pyshell#120>", line 1, in <module>
            print ('hello, %d' % 'world')
        TypeError: %d format: a number is required, not str

输出结果告诉我们需要一个数字,而不是字符串。

(2)在使用%f输出圆周率的示例中,若更改为使用%d输出,结果会怎样?输入如下:

        >>> print (’圆周率PI的值为:%d' % 3.14)
        圆周率PI的值为:3

结果把小数点后的数值都抛弃了。

(3)在用0填充的示例中,把010的第一个0更改为其他数字,看看输出结果。再在精度之前添加一个0或大于0、小于0的数字,看看输出结果。

        >>> print ('圆周率PI的值为:%06.2f' % 3.141593)
        圆周率PI的值为:003.14
        >>> print ('圆周率PI的值为:%16.2f' % 3.141593)
        圆周率PI的值为:          3.14
        >>> print ('圆周率PI的值为:%.02f' % 3.141593)
        圆周率PI的值为:3.14
        >>> print ('圆周率PI的值为:%.12f' % 3.141593)
        圆周率PI的值为:3.141593000000
        >>> print ('圆周率PI的值为:%.-12f' % 3.141593)
        Traceback (most recent call last):
          File "<pyshell#179>",line 1,in <module>
            print ('圆周率PI的值为:%.-12f' % 3.141593)
        ValueError: unsupported format character '-' (0x2d) at index 11

由输出结果看到,将宽度前面的0更改为其他数字会认作宽度值,而不是填充值。在精度前面加0对结果没有影响;若添加大于0的数字,则作为小数的实际位数输出,位数不够后面补0;若添加小于0的数字,则报异常。