python中处理异常的首选方法

2024-04-27 03:56:26 发布

您现在位置:Python中文网/ 问答频道 /正文

什么更好?你知道吗

class CustomException(Exception):
    pass

class CustomSomething(object):
    def do_something(self, xml):
        try:
            lxml.etree.parse(xml)
        except LxmlError as e:  # LxmlError class is only example
            raise CustomException(e)

或者只是

class CustomSomething(object):
    def do_something(self, xml):
        lxml.etree.parse(xml)

什么时候应该使用try/except块并引发自定义异常,什么时候应该让调用我的函数的人来处理它?你知道吗


Tags: selfobjectparsedefxmldolxmlsomething
2条回答

在这种特殊的情况下,我不认为有一个好的理由有一个自定义异常。我只在需要向调用者传回比内置异常更多的信息时才引入自定义异常。即使我必须对内置异常做一些特殊的处理,只要完成我的部分,我就会重新引发原始异常。你知道吗

我可以考虑使用自定义异常的另一个原因是,该类有一个一致的接口,包括它可以引发的所有异常。你知道吗

更重要的是要确保do_something方法记录了它可以引发的所有异常(内置或自定义),以便用户知道要捕获什么。你知道吗

一般来说,当您只是引发另一个异常时,我认为不需要添加try/except块。通常,您引发的异常与您调用的任何对象引发的异常基本相同(因为问题仍然是相同的)。我所能找到的任何官方文档(除了“[s]imple is better than complex”)都不支持这一点;我能找到的最好的文档是the list of built-in exceptions,上面写着:

When creating a module that can raise several distinct errors, a common practice is to create a base class for exceptions defined by that module, and subclass that to create specific exception classes for different error conditions

这似乎只是解释了如何创建自定义异常,而不是何时创建。你知道吗

相关问题 更多 >