这可能是一个开放式或尴尬的问题,但我发现自己遇到了越来越多的异常处理问题,我不知道处理它们的“最佳”方法。
如果您尝试使用不存在的文件配置 FileHandler,Python 的日志记录模块会引发 IOError。该模块不处理此异常,而只是引发它。很多时候,文件的路径不存在(因此文件不存在),所以如果我们想处理异常并继续,我们必须沿着路径创建目录。
我希望我的应用程序能够正确处理此错误,因为每个用户都问我们为什么不为他们创建正确的目录。
我决定处理这个问题的方式可以在下面看到。
done = False
while not done:
try:
# Configure logging based on a config file
# if a filehandler's full path to file does not exist, it raises an IOError
logging.config.fileConfig(filename)
except IOError as e:
if e.args[0] == 2 and e.filename:
# If we catch the IOError, we can see if it is a "does not exist" error
# and try to recover by making the directories
print "Most likely the full path to the file does not exist, so we can try and make it"
fp = e.filename[:e.rfind("/")]
# See http://stackoverflow.com/questions/273192/python-best-way-to-create-directory-if-it-doesnt-exist-for-file-write#273208 for why I don't just leap
if not os.path.exists(fp):
os.makedirs(fp)
else:
print "Most likely some other error...let's just reraise for now"
raise
else:
done = True
我需要循环(或我想是递归),因为需要配置 N 个 FileHandlers,因此需要针对这种情况提出和纠正 N 个 IOErrors。
这是正确的方法吗?有没有更好、更 Pythonic 的方式,我不知道或可能不理解?