Python:尝试/除整个模块外

我有一个包含函数和一些类的python模块。我的一些同事基本上将此模块用作工具集。

我想建立一种错误报告系统,每当有人生成我不处理的异常时,都会发送一封包含该异常信息的电子邮件。这样,我可以不断提高代码的健壮性和我自己的错误消息的帮助范围。这样做是最好的方法,只是在整个模块周围放置一个try / except块?


小怪兽爱吃肉
浏览 148回答 2
2回答

哈士奇WWW

我认为您的方法可能不是最好的原因有很多。有时应该抛出异常。例如,如果我将一些愚蠢的参数传递给函数,则它应该通过抛出异常来抱怨。您不想每次有人传递字符串而不是整数时都收到电子邮件,对吗?此外,将整个内容包装在try ... except中是行不通的,因为那样只会捕获在定义类/函数(加载/导入模块时)期间发生的异常。例如,# Your python librarytry:   def foo():       raise Exception('foo exception')       return 42except Exception as e:   print 'Handled: ', e# A consumer of your libraryfoo()仍然没有发现例外。

慕虎7371278

我想您可以自己制作SelfMailingException并将其子类化。并不是说我会推荐这种方法。另外一个选项:def raises(*exception_list):    def wrap(f):        def wrapped_f(*x, **y):            try:                f(*x, **y)            except Exception as e:                if not isinstance(e, tuple(exception_list)):                    print('send mail')                    # send mail                raise        return wrapped_f    return wrap用法:@raises(MyException)def foo():     ...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python