具有相同名称但子类不同的python异常

时间:2016-10-11 21:14:39

标签: python exception

我正在阅读python doc,并提到

  

通过子类化不相关的两个异常类永远不会等效,即使它们具有相同的名称。

我不确定为什么可能有两个具有相同名称但子类不同的异常类。在这种情况下,不应该产生某种错误/警告吗?

1 个答案:

答案 0 :(得分:1)

例外只是特定类型的类。类名只是它们的定义。禁止类具有相同的名称会制止许多编码方案。一个这样的例子实际上适用于异常:需要向后兼容python2.6的程序通常会覆盖subprocess.CalledProcessError以符合python2.7 / 3.X接口。

你怎么能有两个同名但有不同子类的例外?例如,您可以自由地执行以下操作:

class ExceptoPatronum(KeyError):
    pass

KExcept = ExceptoPatronum

class ExceptoPatronum(OSError):
    pass

OExcept = ExceptoPatronum

这些类的名称相同但不相同或彼此不相同:

print(KExcept.__name__)
print(OExcept.__name__)
print(KExcept == OExcept, KExcept is OExcept)

这是一个(人为的)示例,即使只有一个文件也能运行。但是,假设您有两个单独的模块,每个模块都定义了自己的同名类,请说ResourceUnavailable

只要它们是分开的,为什么要警告用户这样的内部?如果另一个模块依赖于这两个模块,您是否需要它来替换它们?跟踪此类名称冲突将是一场噩梦。