我正在阅读python doc,并提到
通过子类化不相关的两个异常类永远不会等效,即使它们具有相同的名称。
我不确定为什么可能有两个具有相同名称但子类不同的异常类。在这种情况下,不应该产生某种错误/警告吗?
答案 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
。
只要它们是分开的,为什么要警告用户这样的内部?如果另一个模块依赖于这两个模块,您是否需要它来替换它们?跟踪此类名称冲突将是一场噩梦。