【发布时间】:2016-03-12 03:08:15
【问题描述】:
假设我有一个函数:
def ReadFile():
with open("/etc/passwd") as file:
data = file.read()
这个函数可能会成功,在这种情况下它需要返回一个结果,或者它可能会失败,在这种情况下我想返回异常的回溯,它将通过电子邮件发送给我,所以我知道我的程序中发生了一些错误,以及究竟是什么失败了。
为此,我可以这样做:
import traceback
def ReadFile():
try:
with open("/etc/passwd") as file:
data = file.read()
except IOError:
return traceback.format_exc()
return data
如果能够成功读取文件,则返回文件内容。否则返回异常的回溯。
traceback.format_exc() 返回一个字符串。如果 ReadFile() 应该返回一个列表,或者如果成功则返回一个元组或整数,那么事情就很简单了——当你调用 ReadFile() 时,如果返回的结果是一个字符串,你就知道它失败了,你可以运行通过电子邮件发送的代码你知道错误,如果结果是你期望的类型(int、tuple、list 或 w/e),那么你知道它是有效的。
如果 ReadFile() 应该返回一个字符串,就像在我的示例中那样,那么确定 ReadFile() 是成功还是失败变得更加困难,因为您需要解析字符串以确定它是否看起来像回溯或您预期的结果。
有没有更好的方法来做到这一点?也许某种方式可以让 traceback 返回某种与 traceback.format_exc() 包含的信息相同的对象,以便更容易确定 ReadFile() 是成功还是失败?
【问题讨论】:
-
更好的方法是让它在调用点抛出并捕获异常。这就是例外。
标签: python python-2.7