and*_*lei 11 python debugging list-comprehension list
Python列表推导很好,但几乎不可能调试.你们有任何好的技巧/工具来调试它们吗?
我使用的函数只是打印并同时返回一个值:
def debug(msg, item):
print('\n' + msg + ':')
pprint(item)
return item
Run Code Online (Sandbox Code Playgroud)
调试列表/字典理解的任何部分非常方便:
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))
]
Run Code Online (Sandbox Code Playgroud)
这取决于列表理解。您可以将部分代码移至另一个函数。这应该是一个干净的解决方案,更容易调试。
例子:
[1.0 / i for i in [0, 2, 5, 10]]
Run Code Online (Sandbox Code Playgroud)
可分为
[f(i) for i in [0, 2, 5, 10]]
Run Code Online (Sandbox Code Playgroud)
和一个函数
def f(i):
return 1.0 / i
Run Code Online (Sandbox Code Playgroud)
当你做调试,你会发现它会崩溃,因为在“部门按零”的错误f的值i = 0。
如果它足够复杂以至于乍一看并不明显,请将其解压缩为多个步骤和/或 for 循环。它显然太复杂了,使其更明确是调试它的最简单方法。额外的好处:您现在可以使用调试器逐步执行或添加打印语句!