如何在Python中打印stderr?
我遇到过至少三种打印到stderr的方法:
import sys
print >> sys.stderr, 'spam'
sys.stderr.write('spamn')
from __future__ import print_function
print('spam', file=sys.stderr)
这似乎与Python#13†的禅宗相矛盾,所以最好的方法是什么? 这种方式或其他方式有什么优点或缺点?
†应该有一个 - 而且最好只有一个 - 明显的方法来做到这一点。
我发现这是唯一一个短+灵活+便携+可读的:
from __future__ import print_function
import sys
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
eprint
功能可以像标准print
功能一样使用:
>>> print("Test")
Test
>>> eprint("Test")
Test
>>> eprint("foo", "bar", "baz", sep="---")
foo---bar---baz
sys.stderr.write()
是我的选择,只是更具可读性,并且准确地说明您打算在各个版本中进行移植。
编辑:'pythonic'是我在可读性和性能方面的第三个想法......考虑到这两点,使用python 80%的代码将是pythonic。 列表理解是不常用的“大事”(可读性)。
对于Python 2,我的选择是: print >> sys.stderr, 'spam'
因为您可以简单地打印列表/字典等,而无需将其转换为字符串。 print >> sys.stderr, {'spam': 'spam'}
而不是: sys.stderr.write(str({'spam': 'spam'}))