sys.exit的输出有时在print输出之前出现在终端
运行这段代码多次后,有时我能得到预期的输出,但有时却会先出现“列表结束”的提示,这是因为出现了StopIteration
,然后才是循环中的打印内容。
import sys
data = ['a', 'b', 'c']
def myf(*args):
for arg in args:
yield arg
generator_object = myf(*data)
while True:
try:
print(next(generator_object))
except StopIteration:
sys.exit('End of list')
我每次都希望看到的输出是“列表结束”在最后,因为这个异常应该是在生成器没有更多内容可以打印后才会出现。然而,大约一半的时间,我得到的却是这样的结果:
End of list
a
b
c
Process finished with exit code 1
多次运行这段代码的结果看起来是这样的:
这是为什么呢?
1 个回答
2
传给 sys.exit() 的字符串会写入错误输出(stderr),而 print() 默认是写入标准输出(stdout)。虽然最后这些输出都是显示在终端上,但由于这两个输出流是独立缓冲的,所以它们的顺序并不能保证。
文档可以在 这里 找到。