try块之前的语句等待,直到尝试执行完毕

时间:2012-12-29 17:50:36

标签: python try-catch

我写了一个简单的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!")

2 个答案:

答案 0 :(得分:3)

这与try块无关。输出发生得很好,但它是缓冲的。您的终端很可能是行缓冲的,这意味着在完全输出相应的行之前,您不会输出。您可以明确地清除它:sys.stdout.flush()

答案 1 :(得分:2)

标准输出默认为缓冲,sys.stdout.flush()后调用print或使用python -u script.py运行脚本。