调试列表推导的技巧?
Python 的列表推导式很不错,但调试起来几乎不可能。你们有没有什么好的建议或者工具来帮助调试它们?
8 个回答
6
这要看你使用的列表推导式。你可以把一部分代码移到另一个函数里。这样做会让代码更整洁,也更容易调试。
举个例子:
[1.0 / i for i in [0, 2, 5, 10]]
可以分成
[f(i) for i in [0, 2, 5, 10]]
和一个函数
def f(i):
return 1.0 / i
当你调试的时候,你会发现程序会因为在 f
中出现“除以零”的错误而崩溃,特别是当 i = 0
的时候。
21
我使用了一个函数,它可以同时打印出一个值并返回这个值:
from pprint import pprint
def debug(msg, item):
print('\n' + msg + ':')
pprint(item)
return item
这个功能在调试列表或字典的理解式时非常方便:
new_lines = [
debug('CUR UPDATED LINE', change(line))
for line
in debug('ALL LINES', get_lines_from_file(filename))
if debug('CUR LINE EMPTY?', not_empty(line))
]
4
如果你的代码看起来很复杂,一眼看上去就不容易理解,那就把它拆分成多个步骤或者使用循环。这样做是因为代码太复杂了,把它写得更清晰一些是调试的最简单方法。还有一个好处就是,你可以用调试工具逐步查看代码的执行过程,或者加一些打印语句来帮助你理解!