有几种方法可以写入stderr:
print >> sys.stderr, "spam" # Python 2 only.
sys.stderr.write("spam\n")
os.write(2, b"spam\n")
from __future__ import print_function
print("spam", file=sys.stderr)
这些方法之间有什么区别?应首选哪种方法?
有几种方法可以写入stderr:
print >> sys.stderr, "spam" # Python 2 only.
sys.stderr.write("spam\n")
os.write(2, b"spam\n")
from __future__ import print_function
print("spam", file=sys.stderr)
这些方法之间有什么区别?应首选哪种方法?
当前回答
我这样做只是为了好玩,但这里有另一种方式…:-)
message = 'error: Belly up!!'
print(message, file=sys.stderr if 'error' in message.lower() else sys.stdout)
其他回答
如果由于严重错误而要退出程序,请使用:
sys.exit("Your program caused a fatal error. ... description ...")
并在标头中导入sys。
import sys
sys.stderr.write()
是我的选择,只是更具可读性,更准确地说出您想要做的事情,并且可以跨版本移植。
编辑:在可读性和性能方面,“蟒蛇”是我的第三个想法。。。考虑到这两件事,使用python,80%的代码将是pythonic的。列表理解是不经常使用的“大事”(可读性)。
我这样做只是为了好玩,但这里有另一种方式…:-)
message = 'error: Belly up!!'
print(message, file=sys.stderr if 'error' in message.lower() else sys.stdout)
Python 3:
print("fatal error", file=sys.stderr)
Python 2:
print >> sys.stderr, "fatal error"
答案很长
print>>sys.stderr已在Python3中消失。http://docs.python.org/3.0/whatsnew/3.0.html说:
旧:print>>sys.stderr,“致命错误”新建:打印(“致命错误”,文件=sys.stderr)
对我们中的许多人来说,将目的地归为指挥的终点,感觉有些不自然。替代方案
sys.stderr.write("fatal error\n")
看起来更面向对象,从通用到特定都很优雅。但请注意,书写并不是打印的1:1替代。
我使用Python 3执行了以下操作:
from sys import stderr
def print_err(*args, **kwargs):
print(*args, file=stderr, **kwargs)
因此,现在我可以添加关键字参数,例如,以避免回车:
print_err("Error: end of the file reached. The word ", end='')
print_err(word, "was not found")