据我所知,当运行以下代码时,print(url, end='')将首先打印一行。
然后requests.get(url)引发异常,从而触发traceback.print_exc().
但在我的测试中,traceback.print_exc()屏幕上的打印早于print(url, end='').
为什么?
另一方面,如果我用 替换traceback.print_exc(),print('error occurred')它就会按照我的想法工作。
看来 的traceback.print_exc()优先级更高?
import traceback
import requests
url = 'http://www.szwb.gov.cn/wap/jggk/gzdt/201809/t20180919_14099889.htm'
try:
print(url, end='')
response = requests.get(url)
# balabala
except Exception as e:
traceback.print_exc()
# print('error occurred.')
Run Code Online (Sandbox Code Playgroud)
print将输出到 STDOUT 并将traceback.print_exc()输出到 STDERR。STDOUT 是“缓冲的”,而 STDERR 不是。从这篇文章:
默认情况下,程序中的 I/O 是缓冲的,这意味着 IO 不会立即逐字节服务,而是从临时存储服务到请求程序...通过缓冲,整个块立即读入缓冲区,然后各个字节从(快速内存中)缓冲区传递给您。
当缓冲区被“刷新”时,就会显示出来。通常,如果输出是终端,则缓冲区会在新行处刷新。
在 Python 3 中,您可以使用flushkwarg 强制执行此操作:
print(url, end='', flush=True)
Run Code Online (Sandbox Code Playgroud)
这实际上与以下相同:
import sys
# ...
print(url, end='')
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
或者,您可以删除endkwarg:
print(url)
Run Code Online (Sandbox Code Playgroud)
请注意,这将在 URL 后打印一个换行符。这可能是不受欢迎的。
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |