调试列表推导的提示?

and*_*lei 11 python debugging list-comprehension list

Python列表推导很好,但几乎不可能调试.你们有任何好的技巧/工具来调试它们吗?

Rot*_*eti 9

我使用的函数只是打印并同时返回一个值:

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)


Elm*_*80s 5

这取决于列表理解。您可以将部分代码移至另一个函数。这应该是一个干净的解决方案,更容易调试。

例子:

[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


Ste*_*ker 4

如果它足够复杂以至于乍一看并不明显,请将其解压缩为多个步骤和/或 for 循环。它显然太复杂了,使其更明确是调试它的最简单方法。额外的好处:您现在可以使用调试器逐步执行或添加打印语句!

  • 那种感觉就像是投降 (14认同)