调试列表推导的技巧?

24 投票
8 回答
6642 浏览
提问于 2025-04-15 20:58

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

如果你的代码看起来很复杂,一眼看上去就不容易理解,那就把它拆分成多个步骤或者使用循环。这样做是因为代码太复杂了,把它写得更清晰一些是调试的最简单方法。还有一个好处就是,你可以用调试工具逐步查看代码的执行过程,或者加一些打印语句来帮助你理解!

撰写回答