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



我的代码基本上是这样的,在取出相关部分后:

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

输出为:

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

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

您将获得第二行,因为print打印您按顺序提供的内容列表。所以你要打印error,然后什么都不打印,然后是换行符,然后是sys.stderr——它有自己的字符串表示形式,即<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>,然后是False

来自REPL:

>>> import sys
>>> print("a", "b", "c")
a b c
>>> print(sys.stderr)
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
鉴于此,您应该明确期望的输出是什么。假设您正在尝试打印到stderr,在这种情况下,您需要使用'命名参数':
>>> print("a", "b", "c", sep=' +++ ', end='n', file=sys.stderr, flush=False)
a +++ b +++ c

请注意,因为print的签名包含*objects作为它的第一个参数,它将假设交给它的所有东西都是它正在打印的东西。如果需要设置sependfileflush参数,必须命名。

最新更新