rank vote view answer url
92 1022 608770 15 url

输出到stderr

我知道至少三种方法这么做:

import sys
 sys.stderr.write('spam\n')

 print >> sys.stderr, 'spam'

 from __future__ import print_function
 print('spam', file=sys.stderr)

但是看起来和python的第13条宗旨相违背,所以有什么更好的方法吗?或者上面那些方法有什么可以改进?

There should be one — and preferably only one — obvious way to do it.


我发现只有这个方法短小+便捷+可读性好:

from __future__ import print_function
def warning(*objs):
    print("WARNING: ", *objs, file=sys.stderr)

我会选择sys.stderr.write(),更可读而且言简意赅的突出重点,最主要的是在所有版本都可以用.

注:Pythonic是除了可读和效率意外才考虑的事情...如果记住前两条的话80%的代码就已经是Pythonic了.列表推导式是一个'big thing'所以不经常用(可读性).