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

标签 python exception

在 python 中,定义用户定义的异常是很常见的,这样当用户定义的类发生错误时,它们可以返回一些用户定义的测试/输出/任何东西。但我想知道,在 python 中是否有处理给定类异常的良好做法?详细来说,我有以下问题:

  1. 所有与类相关的异常应该放在定义 python 类的文件中,还是应该放在特定文件中?

  2. 是否应该为任何可能引发异常的事情定义异常,或者只为类定义一个一般异常并打印出错误发生的位置和事件的详细信息是否“可以”给一些额外的文字?

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

谢谢 亚历克斯

最佳答案

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

    一个常见的设置是从包的根导出包的所有异常,所以你可以说 from foo import Foo, FooError, BarError。模块系统是否可以隐藏同一文件中的定义。

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

  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.
    

关于python - 如何从概念上处理 python 中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013826/

相关文章:

haskell - 从 MonadIO 内部“捕获”

python - 将 Pandas df 转换为字典

python - Python 中的 Monte Carlo 和 Metropolis 算法非常慢

java - 如何使用 grep 从日志文件捕获 Java 异常,包括堆栈跟踪?

java - Spring - RestTemplate 抛出 InvalidMediaTypeException

java - 是什么导致异常中的递归原因?

python - 在包含项目列表的列中查找共同值

python - Flask Sqlalchemy ORM如何添加一个属性来返回子项的计数

python - 使用 pandas 有效计算剩余使用生命周期

python - 捕获异常并立即再次引发它有什么值(value)吗?