Python try块之前的语句将等待try完成后执行

Python try块之前的语句将等待try完成后执行,python,try-catch,Python,Try Catch,我编写了一个简单的Python(3.2)脚本来下载一系列文件。它完成了任务,但是try块之前的第一个print语句在文件下载开始之前不会执行。我希望看到“下载1…”,然后等待几分钟,然后它会打印“成功”或“失败”。但是,这一切都是在文件下载后同时发生的。它仍然按正确的顺序打印(即“下载1…成功!”),但我一辈子都搞不清楚它为什么会挂起来 from urllib import request for i in range(1,35): url = "http://example.com/

我编写了一个简单的Python(3.2)脚本来下载一系列文件。它完成了任务,但是try块之前的第一个print语句在文件下载开始之前不会执行。我希望看到“下载1…”,然后等待几分钟,然后它会打印“成功”或“失败”。但是,这一切都是在文件下载后同时发生的。它仍然按正确的顺序打印(即“下载1…成功!”),但我一辈子都搞不清楚它为什么会挂起来

from urllib import request

for i in range(1,35):
    url = "http://example.com/" + str(i) + ".mp4"   
    print("Downloading " + str(i) + "...", end='') #this doesn't happen until after the try
    try:    
        resp = request.urlopen(url)
        local = open(str(i) + '.mp4', 'wb') 
        local.write(resp.read())
        local.close()   
        print("SUCCESS!")
    except:
        print("FAILURE!")

默认情况下,标准输出是缓冲的,在
print
s之后调用
sys.stdout.flush()
,或者使用
python-u script.py
运行脚本。这与
try
块无关。输出发生得很好,但它是缓冲的。您的终端很可能是行缓冲的,这意味着您在相应的行完全输出之前看不到输出。您可以显式刷新它:
sys.stdout.flush()

这个-u标志没有做任何事情(奇怪的是),sys.stdout.flush()工作得很好。谢谢,这就解释了一切。