我的代码基本上看起来像这样,只取出相关部分:
import sys
print("error", "", "\n", sys.stderr, False)
输出结果为:
error
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'> False
为什么我会得到第二行,如何摆脱它?
答案 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>必须,必须为*objects
,sep
,end
和file
参数命名。