我正在从网上下载文件,即使我这样做也会失败:
查询中的p:
try:
except IOError as e:
print e;
如果出现错误,我想记录它,然后继续下一个文件。
在这个循环中,我试图下载一个图像,如果由于某种原因文件名错误,或者网站关闭等等,我想继续使用for循环中的下一个项目。 /强>
是否存在更通用的错误,不会失败并继续处理?
另外,如何将错误记录到文件中?
答案 0 :(得分:15)
您可以使用logging module:
import logging
logging.basicConfig(filename='/tmp/myapp.log', level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(name)s %(message)s')
logger=logging.getLogger(__name__)
try:
1/0
except ZeroDivisionError as err:
logger.error(err)
运行脚本在/tmp/myapp.log中写入:
% cat /tmp/myapp.log
2010-08-01 17:50:45,960 ERROR __main__ integer division or modulo by zero
答案 1 :(得分:13)
正如Lott所指出的,如果下载失败,除非问题在上游(或使用您的下载地址)得到修复,您可以做的最好是再试一次。但是,如果情况是您有下载列表,并且只是想跳过失败的下载而不是退出,那么:
logf = open("download.log", "w")
for download in download_list:
try:
# code to process download here
except Exception as e: # most generic exception you can catch
logf.write("Failed to download {0}: {1}\n".format(str(download), str(e)))
# optional: delete local version of failed download
finally:
# optional clean up code
pass
注意事项:
(1)按照unutbu的建议使用“logging
”模块,为您的日志输出提供更大的灵活性和强大功能,包括时间戳,同时写入不同的通道(例如,stderr,文件)取决于错误级别等。
(2)您可以考虑使用“with
”构造实现上述逻辑。
答案 2 :(得分:3)
这会抓住一切。 但要抓住确切的例外要好得多。 python< = 2.7
while True:
try:
doStuff()
except Exception, e:
f = open('log.txt', 'w')
f.write('An exceptional thing happed - %s' % e)
f.close()
答案 3 :(得分:0)
这会将您的错误写入日志文件并继续运行代码。
import traceback
#This line opens a log file
log = open("log.txt", "w")
try:
# some code
# Below line will print any print to log file as well.
print("Creating DB Connection", file = log)
except Exception:
traceback.print_exc(file=log)
continue