在python中处理异常
处理异常的最佳方式是什么在python中处理异常,python,django,Python,Django,处理异常的最佳方式是什么 class SRException(Exception): default_exception = True def somefun1(email): try: user = somefun2(email) except Exception, e: raise SRException, ("could not find the email", e) def som
class SRException(Exception):
default_exception = True
def somefun1(email):
try:
user = somefun2(email)
except Exception, e:
raise SRException, ("could not find the email", e)
def somefun2(email):
try:
user = User.objects.get(email = email)
except Exception, e:
raise SRException, ("could not find the user objecets",e )
所以当异常发生时,我会得到一长串异常
UserProfileException('找不到
用户或服务对象',
UserProfileException('找不到
用户的ServicesException('无法
找不到服务',
DoesNotExist('服务匹配查询
不存在。“,”“”“”“”“”“”“”“”))
错误和上面的代码示例不一样。但我想我已经说清楚了
那么,处理异常的最佳方法是什么呢。
我不应该在每个例外情况下都提出这一点。每次出现异常时,我都会向技术团队发送邮件。通常不需要在调用堆栈的每个级别包装异常。您最好捕获调用堆栈中较高位置的异常,并将堆栈跟踪转储到技术支持电子邮件中。这将非常清楚地指出问题发生的位置以及调用它的来源
在
sys.exc_info()[2]
中挖掘一下,您甚至可以在每个堆栈框架中转储一个完整的参数和局部变量列表,这将为支持人员提供有问题的电子邮件地址。通常不必在调用堆栈的每个级别包装异常。您最好捕获调用堆栈中较高位置的异常,并将堆栈跟踪转储到技术支持电子邮件中。这将非常清楚地指出问题发生的位置以及调用它的来源
在
sys.exc_info()[2]
中挖掘一下,您甚至可以在每个堆栈框架中转储一个完整的参数和局部变量列表,这会给支持人员一个令人不快的电子邮件地址。您的异常处理程序太广泛,只捕获您知道可以处理的特定异常。捕获一个异常而只将其包装在另一个异常中并重新引发它是没有意义的;异常对象带有一个回溯,它将显示代码的路径。只要让异常冒泡起来,并在可以从异常中恢复的级别捕获它。您的异常处理程序太广泛,只捕获您知道可以处理的特定异常。捕获一个异常而只将其包装在另一个异常中并重新引发它是没有意义的;异常对象带有一个回溯,它将显示代码的路径。只要让异常冒泡起来,并在可以从异常中恢复的级别捕获它。首先,不要只检查异常
!始终使用您实际期望的正确子类型
此外,您不应该将已经有用的异常封装到其他异常中;通常,使用异常的类型作为发生情况的标识。然后,您可以继续在低级别抛出(信息性)异常,并在更高级别单独捕获它们,以确定最终用户的正确错误消息。首先,不要只检查
异常!始终使用您实际期望的正确子类型
此外,您不应该将已经有用的异常封装到其他异常中;通常,使用异常的类型作为发生情况的标识。然后,您可以继续在低级别抛出(信息性)异常,并在更高级别分别捕获它们,以确定最终用户的正确错误消息。在Python中,我们引发异常;我们不会扔它们;-)@克里斯·摩根:是的,我知道,但还是一样的:P除此之外,这个答案适用于所有有异常的语言。在Python中,我们提出异常;我们不会扔它们;-)@克里斯·摩根:是的,我知道,但还是一样的:除此之外,这个答案适用于所有有例外的语言。首先,你想做什么?你的代码毫无意义,因此如果你想让我们给你一个anwser,你会给你一个目标,这样我们就可以理解问题。首先,你想做什么?你的代码毫无意义,因此,如果你想让我们给你一个anwser,它会为你提供一个目标,让我们能够理解这个问题。嘿,谢谢。你能提供一些关于处理sys.exc_info()[2]的链接或博客吗?嘿,谢谢。你能给我提供一些关于处理sys.exc_info()[2]的链接或博客吗?