我是一个相对的python新手,我对如何正确处理异常感到困惑。为愚蠢的问题道歉。
在我的 main() 中,我遍历一个日期列表,并为每个日期调用一个函数,该函数从公共 Web 服务器下载一个 csv 文件。出于明显的原因,我想正确捕获异常,但尤其是因为我不知道感兴趣的文件何时可以下载。我的程序将作为 cron 作业的一部分执行,如果可用,将尝试每 3 小时下载一次这些文件。
我想要的是下载日期列表中的第一个文件,如果结果为 404,则程序不应继续执行下一个文件,因为假设如果列表中最旧的日期不可用,则没有之后的其他人也将可用。
我有以下 python 伪代码。我在尝试下载文件的函数内部有 try/except 块,但如果函数内部发生异常,我如何在 main() 中正确处理它,以便我可以决定是否继续下一个日期。我创建一个函数来执行下载的原因是因为我想稍后在同一个 main() 块中为其他文件类型重用该代码。
def main():
...
...
# datelist is a list of date objects
for date in datelist:
download_file(date)
def download_file(date):
date_string = str(date.year) + str(date.strftime('%m')) + str(date.strftime('%d'))
request = HTTP_WEB_PREFIX+ date_string + FILE_SUFFIX
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, e:
print "HTTPError = " + str(e)
except urllib2.URLError, e:
print "URLError = " + str(e)
except httplib.HTTPException, e:
print "HTTPException = " + str(e)
except IOError:
print "IOError = " + str(e)
except Exception:
import traceback
print "Generic exception: " + traceback.format_exc()
else:
print "No problem downloading %s - continue..." % (response)
try:
with open(TMP_DOWNLOAD_DIRECTORY + response, 'wb') as f:
except IOError:
print "IOError = " + str(e)
else:
f.write(response.read())
f.close()