使用列表时的调试技巧

时间:2011-12-08 19:18:02

标签: python debugging list

我来到这个片段:

li = ['a', 'b', 'c']
print "\n".join(li)

作者说:

  

当您使用列表时,这也是一个有用的调试技巧。

这里的诀窍是什么?

source

3 个答案:

答案 0 :(得分:2)

“技巧”是在单独的行中打印列表的每个元素,这就是全部。

答案 1 :(得分:1)

“技巧”是"\n".join(li)在显示屏上写下 li 的所有元素所需的时间比以下代码少:

for x in li:
    print li

如果 li 的元素很少,那么差异就不会被察觉 但是用长列表测试差异,这很明显

“技巧”这个词有点过分了。

答案 2 :(得分:1)

打印类似无用的列表进行调试:

(1)如果任何列表项不是字符串,您将获得例外。

(2)你的标准输出可能无法显示字符串,导致异常或只是乱码。

(3)您不会看到(例如)制表符(\t)和多个空格之间的区别。

好多了:

Python 2.x:print repr(li)

Python 3.x:print(ascii(li))

更新以下是Python 3.x上print(li')可能发生的事情(上面的问题2):

>>> li = ['\u0404']
>>> print(li)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\python32\lib\encodings\cp850.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u0404' in position
2: character maps to <undefined>

请注意,print li“仅适用于Python 2.x,因为repr()是隐式调用的。一般来说,应该print repr(thing)。另请注意,{3.}}在Python 3.x上可能会失败,因为它隐式调用print(li),而不是repr()

更新2 如果您想查找列表中的所有非字符串,请明确执行,不要依赖“技巧”:

ascii()