【发布时间】:2018-01-31 13:27:44
【问题描述】:
我正在为一项非常具体的任务设计工作流引擎,并且正在考虑异常处理。
我有一个调用几个函数的主进程。大多数这些函数调用其他更具体的函数等等。涉及一些库,因此可能会发生很多特定错误。 IOError、OSError、AuthenticationException ...
我必须在发生错误时停止工作流并将其记录下来,以便在解决错误后从该点继续。
我的意思的例子:
def workflow_runner():
download_file()
...
(more calls with their own exceptions)
...
def download_file():
ftps = open_ftp_connection()
ftps.get(filename)
...
(more calls with their own exceptions)
...
def open_ftp_connection():
ftps = ftplib.FTP_TLS()
try:
ftps.connect(domain, port)
ftps.login(username, password)
except ftplib.all_errors as e:
print(e)
raise
return ftps
您的基本、常规、模块化功能。
我的问题是这样的:
在 Python 3 中进行自上而下的错误处理的最佳方式是什么?
- 要将每个异常都提升到顶部,从而将“try except”置于每个调用堆栈的函数之上?
- 要在每个异常发生时处理它,记录并引发,并且在“顶部”没有“尝试除外”?
- 有更好的选择吗?
当场完成并提出错误或在“download_file”和/或“workflow_runner”函数中捕获它会更好吗?
我问是因为如果我最终将所有内容都放在顶部,我觉得我最终可能会得到:
except AError
except BError
...
except A4Error
【问题讨论】:
标签: python python-3.x error-handling software-design