Python 3.8从零开始学
上QQ阅读APP看书,第一时间看更新

4.5 调试

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

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

>>> print ('hello,%d' % 'world')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
ValueError: unsupported format character '-' (0x2d) at index 11

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