Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改python未处理异常的行为以发送电子邮件_Python_Email_Exception_Subclass - Fatal编程技术网

更改python未处理异常的行为以发送电子邮件

更改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) 然后在模块开始时,我可以这样做:

我想改变python中未处理异常(所有异常)的行为,以便在不太改变代码或到处使用特殊错误处理程序的情况下发送电子邮件

我希望将Exception子类化,然后在给定模块的开头重新定义它

子类化在这里:

class ExceptionMailer(Exception):
    def __init__(self, m):
        self.message = m
        send_email(email_address,self.message)
然后在模块开始时,我可以这样做:

Exception = ExceptionMailer

然后,当引发异常时,将发送一封包含其消息的电子邮件。我已经让它严格适用于
异常
,但不适用于say
ValueError
。我希望重新定义
异常
将重新定义所有错误类型,但我显然错了。我想做的是可能的吗?

在您重新定义
异常的那一刻,它的所有子类都已创建,因此不会影响它们:

>>> 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%确定如何在这一秒做到这一点;)