在Python中的用户定义类中对用户定义的异常进行子类化

在Python中的用户定义类中对用户定义的异常进行子类化,python,class,oop,object,subclass,Python,Class,Oop,Object,Subclass,为什么这样做有效: class A: class BError(Exception): pass class CError(AError): pass 但这并不是: class A: class BError(Exception): pass class CError(A.BError): pass 如果“方法1”适用于调用类变量,那么在编译时为什么不适用于“类类”,python构建类,然后将其分

为什么这样做有效:

class A:
    class BError(Exception):
        pass
    class CError(AError):
        pass
但这并不是:

class A:
    class BError(Exception):
        pass
    class CError(A.BError):
        pass

如果“方法1”适用于调用类变量,那么在编译时为什么不适用于“类类”

,python构建类,然后将其分配给封闭命名空间中的命名变量。在第一个示例中(假设您真正指的是
class CError(BError)
),已编译
BError
,并将其分配给
A
类命名空间,以便对下一个类可见。但在第二个示例中,top类尚未分配给全局
A
变量,因此无法找到
A.BError

该问题可以用以下方式说明:

>>> class A:
...     print('A' in globals())
... 
False
>>> print('A' in globals())
True
>>> 

在第一个示例中没有
AError
。类对象仅在其整个Class语句执行后创建。