如何在概念上处理python中的异常?

时间:2012-10-22 14:41:06

标签: python exception exception-handling

在python中,通常定义用户定义的异常,以便在用户定义的类中发生错误时,它们可以返回一些用户定义的测试/输出/任何内容。但我想知道,如果有一个很好的做法来处理python中给定类的异常?详细地说,我有以下问题:

  1. 所有与类相关的异常都应该进入定义python类的文件,还是应该进入特定的文件?

  2. 是否应该为任何应该引发异常的事物定义异常,或者只是为一个类定义一般异常并打印出错误中发生的位置和内容的详细信息“ok”通过提供一些额外的文字的方式?

  3. 如果有人可以发布一个用户定义的异常如何/应该是什么样子的示例,我将不胜感激,因此要查看定义您自己的特定异常类是一件好事的原因。

  4. 由于   亚历

1 个答案:

答案 0 :(得分:0)

  1. Python程序的文件级组织并不是特别有趣,除非您正在进行维护。模块级组织在确定API时更为重要(至少在import时间),因此请确保您的例外位于使用它们的模块中。

    常见的设置是从该程序包的根目录导出程序包的所有异常,因此您可以说from foo import Foo, FooError, BarError。模块系统是否可以隐藏定义是否存在于同一文件中。

  2. 完全取决于您希望捕获异常的细粒度。但是,我经常发现内置的异常(ValueErrorTypeError等)足够精细。对于包中可能出错的特定事项,您可以添加一个或多个例外。

  3. 怎么样......

    class ParseError(Exception):
        def __init__(self, parser_input, line, column):
            self.input = parse_input
            self.line = line
            self.column = column
    
        def __str__(self):
            # format the exception message, showing the offending part of
            # self.input and what the parser was expecting.