2024-04-26 05:46:24 发布
网友
我正在读python doc,它提到
Two exception classes that are not related via subclassing are never equivalent, even if they have the same name.
我不知道为什么可能有两个同名但子类不同的异常类。在这种情况下不应该产生某种错误/警告吗?你知道吗
异常只是类的特定类型。类名只是它们的定义。禁止类具有相同的名称会阻止许多编码方案。一个这样的例子实际上适用于异常:需要与python2.6向后兼容的程序通常会重写subprocess.CalledProcessError,以符合python2.7/3.X接口。你知道吗
subprocess.CalledProcessError
怎么会有两个同名但子类不同的异常呢?例如,您可以自由地执行以下操作:
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。你知道吗
ResourceUnavailable
既然它们是分开的,为什么要提醒用户注意这样的内部结构呢?如果另一个模块同时依赖这两个模块,您是否需要它来替换它们?跟踪这样的名称冲突将是一场噩梦。你知道吗
异常只是类的特定类型。类名只是它们的定义。禁止类具有相同的名称会阻止许多编码方案。一个这样的例子实际上适用于异常:需要与python2.6向后兼容的程序通常会重写
subprocess.CalledProcessError
,以符合python2.7/3.X接口。你知道吗怎么会有两个同名但子类不同的异常呢?例如,您可以自由地执行以下操作:
这些类的名称相同,但既不相等,也不相互引用:
这是一个(人为的)示例,即使只有一个文件也可以运行。但是,假设您有两个独立的模块,每个模块用相同的名称定义自己的自定义类,比如
ResourceUnavailable
。你知道吗既然它们是分开的,为什么要提醒用户注意这样的内部结构呢?如果另一个模块同时依赖这两个模块,您是否需要它来替换它们?跟踪这样的名称冲突将是一场噩梦。你知道吗
相关问题 更多 >
编程相关推荐