在Python 3中打印到stderr时获取不需要的输出

时间:2016-08-25 00:58:40

标签: python-3.x python-3.5 stderr

我的代码基本上看起来像这样,只取出相关部分:

import sys
print("error", "", "\n", sys.stderr, False)

输出结果为:

 error
  <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'> False

为什么我会得到第二行,如何摆脱它?

1 个答案:

答案 0 :(得分:1)

您获得第二行是因为print prints the list of things you give it in sequence。所以你要打印error,然后再打印,然后是新行,然后sys.stderr - 它有自己的字符串表示形式<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>,然后是{{1 }}

来自REPL:

False

鉴于此,你应该澄清你期望输出的内容。大概是您尝试打印到>>> import sys >>> print("a", "b", "c") a b c >>> print(sys.stderr) <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'> ,在这种情况下,您需要使用&#39;命名参数&#39;:

stderr

请注意,由于>>> print("a", "b", "c", sep=' +++ ', end='\n', file=sys.stderr, flush=False) a +++ b +++ c 的签名包含了它的第一个参数print,因此它会假设所有传递给它的内容都是它正在打印的内容。如果您要设置{em>必须,必须*objectssependfile参数命名。