同名但子类不同的python异常

2024-04-26 05:46:24 发布

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

我正在读python doc,它提到

Two exception classes that are not related via subclassing are never equivalent, even if they have the same name.

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


Tags: docifthatexceptionnotareviaclasses
1条回答
网友
1楼 · 发布于 2024-04-26 05:46:24

异常只是类的特定类型。类名只是它们的定义。禁止类具有相同的名称会阻止许多编码方案。一个这样的例子实际上适用于异常:需要与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。你知道吗

既然它们是分开的,为什么要提醒用户注意这样的内部结构呢?如果另一个模块同时依赖这两个模块,您是否需要它来替换它们?跟踪这样的名称冲突将是一场噩梦。你知道吗

相关问题 更多 >