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))
]
def trcPV(prompt, value):
print ("%s%s" % (prompt, str(value)))
return value
xs = trcPV("xs=", [x for x in range(0,100) if trcPV("check=",(trcPV("x=",x) % 15) in [0,3,5])])
8条答案
按热度按时间cgyqldqp1#
我使用了一个函数,它同时打印和返回一个值:
这对于调试list/dict理解的任何部分都非常方便:
j5fpnvbx2#
这取决于列表的理解。你可以把代码的一部分移到另一个函数中。这应该是一个更容易调试的干净的解决方案。
示例:
可分为
和函数
当您进行调试时,您会发现由于
i = 0
的值在f
处出现“被零除”错误,因此会崩溃。wgmfuz8q3#
如果它太复杂了,乍一看并不明显,那么就把它分解成多个步骤和/或for循环。它显然太复杂了,使它更明确是调试它的最简单的方法。额外的好处:您现在可以使用调试器单步调试或添加print语句!
3bygqnnd4#
在Haskell我使用类似的东西:
oknwwptz5#
提示:对于简单的任务(1或2级)使用列表解析。2否则,使其显式化对可读性更好。
1cklez4t6#
使用像
pdb
这样的调试器来遍历列表解析,或者将列表解析分解为一个完整的for循环。ippsafx77#
Haskell列表解析至少可以用map、concat和filter重写(编译器就是这么做的)。
这个 haskell 的例子:
计算结果为:
我希望类似的身份将继续适用于Python,所以类似的分解也会产生Python中的等价代码,等价代码应该更容易调试(并且运行效率也差不多)。
u2nhd7ah8#
基于Elmex80s构建的https://stackoverflow.com/a/39350403/5339264响应非常好,使用调试函数也可以帮助处理
TypeError: unsupported operand type(s) for +: 'method' and 'str'
或列表理解中的类似错误。经典
在列表解析中,例如
可以非常有用地查明列表中的哪个项目导致了错误。