更改python未处理异常的行为以发送电子邮件
我想改变python中未处理异常(所有异常)的行为,以便在不太改变代码或到处使用特殊错误处理程序的情况下发送电子邮件 我希望将Exception子类化,然后在给定模块的开头重新定义它 子类化在这里:更改python未处理异常的行为以发送电子邮件,python,email,exception,subclass,Python,Email,Exception,Subclass,我想改变python中未处理异常(所有异常)的行为,以便在不太改变代码或到处使用特殊错误处理程序的情况下发送电子邮件 我希望将Exception子类化,然后在给定模块的开头重新定义它 子类化在这里: class ExceptionMailer(Exception): def __init__(self, m): self.message = m send_email(email_address,self.message) 然后在模块开始时,我可以这样做:
class ExceptionMailer(Exception):
def __init__(self, m):
self.message = m
send_email(email_address,self.message)
然后在模块开始时,我可以这样做:
Exception = ExceptionMailer
然后,当引发异常时,将发送一封包含其消息的电子邮件。我已经让它严格适用于
异常
,但不适用于sayValueError
。我希望重新定义异常
将重新定义所有错误类型,但我显然错了。我想做的是可能的吗?在您重新定义异常的那一刻,它的所有子类都已创建,因此不会影响它们:
>>> class A(object):
def a(self):
print 'a in A'
>>> class B(A):
pass
>>> B().a()
a in A
>>> class C(object):
def a(self):
print 'a in C'
>>> A = C
>>> B().a()
a in A
关于你的问题。看一看。它允许您在出现任何未捕获的异常时重新定义程序行为
我想更改异常(所有异常)的行为
不,你没有。在Python中,异常用于流控制。例如,每次引发StopIteration
,或比较函数失败,或库使用异常发出信号时,处理程序都会触发
相反,只需将代码封装在
try:
# ... large block of code
except BaseException as e:
send_email(email_address, e.message)
不幸的是,设置内置的classes\uuuu base\uuu
属性似乎是不可能的。你是说我应该尝试将所有代码打包在一次大的尝试中,除了?这是好的做法吗?这是最好的做法。您不需要实际缩进太多代码,只需将对main
方法或其他类似根方法的调用包装起来。您能解释一下为什么您认为这样做是正确的吗?而且,我也不是100%确定如何在这一秒做到这一点;)