你知道吗怪怪的地址:
import sys
def f ():
print('f', end = '')
g()
def g ():
1 / 0
try:
f()
except:
print('toplevel', file = sys.stderr)
Python会话:
Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 6 2014, 22:16:31) [MSC v.1600 64 bit (AM
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import weird
toplevel
f>>>
为什么“toplevel”在“f”之前打印?你知道吗
如果移除end = ''
或file = sys.stderr
,则不会发生这种情况。你知道吗
因为stdout和stderr是线缓冲的。它们缓冲字符,只有当您有一个完整的行时才会刷新。你知道吗
通过设置
end=''
,您可以确保没有完整的行,并且直到稍后Python交互式解释器输出>>>
并显式刷新缓冲区时才刷新缓冲区。你知道吗如果删除
file=sys.stderr
,则再次输出到sys.stdout
,并将toplevel\n
打印为print()
添加新行,从而刷新sys.stdout
缓冲区。你知道吗通过将
flush=True
参数设置为print()
函数(python3.3及更高版本)或调用sys.stdout.flush()
,可以显式强制刷新。你知道吗相关问题 更多 >
编程相关推荐