python2.5问题中的异常记录

python2.5问题中的异常记录,python,winapi,Python,Winapi,我使用的是Python2.5&下面的代码产生了2个错误。 有人能帮我吗 class EXCEPTION_RECORD(Structure): _fields_ = [ ("ExceptionCode", DWORD), ("ExceptionFlags", DWORD), ("ExceptionRecord", POINTER(EXCEPTION_RECORD)), ("ExceptionAddress", LPVOID),

我使用的是Python2.5&下面的代码产生了2个错误。 有人能帮我吗

class EXCEPTION_RECORD(Structure):
    _fields_ = [
        ("ExceptionCode", DWORD),
        ("ExceptionFlags", DWORD),
        ("ExceptionRecord", POINTER(EXCEPTION_RECORD)),
        ("ExceptionAddress", LPVOID),
        ("NumberParameters", DWORD),
        ("ExceptionInformation", ULONG_PTR * EXCEPTION_MAXIMUM_PARAMETERS)]
Python错误:

Traceback (most recent call last):
  File "E:\Python25\my_debugger_defines.py", line 70, in <module>
    class EXCEPTION_RECORD(Structure):
  File "E:\Python25\my_debugger_defines.py", line 74, in EXCEPTION_RECORD
    ("ExceptionRecord", POINTER(EXCEPTION_RECORD)),
NameError: name 'EXCEPTION_RECORD' is not defined

提前感谢

显然,定义类时不能引用类类型,例如:

>>> class C:
    f = C



Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    class C:
  File "<pyshell#17>", line 2, in C
    f = C
NameError: name 'C' is not defined
我将按照以下方式重新编写您的代码:

class EXCEPTION_RECORD(Structure):
    pass

EXCEPTION_RECORD._fields_ = [
        ("ExceptionCode", DWORD),
        ("ExceptionFlags", DWORD),
        ("ExceptionRecord", POINTER(EXCEPTION_RECORD)),
        ("ExceptionAddress", LPVOID),
        ("NumberParameters", DWORD),
        ("ExceptionInformation", ULONG_PTR * EXCEPTION_MAXIMUM_PARAMETERS)]
class EXCEPTION_RECORD(Structure):
    pass
EXCEPTION_RECORD._fields_ = [
        ("ExceptionCode", DWORD),
        ("ExceptionFlags", DWORD),
        ("ExceptionRecord", POINTER(EXCEPTION_RECORD)),
        ("ExceptionAddress", LPVOID),
        ("NumberParameters", DWORD),
        ("ExceptionInformation", ULONG_PTR * EXCEPTION_MAXIMUM_PARAMETERS)]

显然,在定义类时不能引用类类型,例如:

>>> class C:
    f = C



Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    class C:
  File "<pyshell#17>", line 2, in C
    f = C
NameError: name 'C' is not defined
我将按照以下方式重新编写您的代码:

class EXCEPTION_RECORD(Structure):
    pass

EXCEPTION_RECORD._fields_ = [
        ("ExceptionCode", DWORD),
        ("ExceptionFlags", DWORD),
        ("ExceptionRecord", POINTER(EXCEPTION_RECORD)),
        ("ExceptionAddress", LPVOID),
        ("NumberParameters", DWORD),
        ("ExceptionInformation", ULONG_PTR * EXCEPTION_MAXIMUM_PARAMETERS)]
class EXCEPTION_RECORD(Structure):
    pass
EXCEPTION_RECORD._fields_ = [
        ("ExceptionCode", DWORD),
        ("ExceptionFlags", DWORD),
        ("ExceptionRecord", POINTER(EXCEPTION_RECORD)),
        ("ExceptionAddress", LPVOID),
        ("NumberParameters", DWORD),
        ("ExceptionInformation", ULONG_PTR * EXCEPTION_MAXIMUM_PARAMETERS)]

类可以在_new _或_init _方法中引用自身

或:


或者,如果你真的想变得有趣,你可以使用一个元类。

一个类可以在新方法或初始化方法中引用自己

或:

或者,如果你真的想玩得开心,你可以使用一个元类。

看起来你已经做了一个从ctypes导入的可怕的实践,因为人们只能猜测像DWORD这样的标识符实际上来自哪里但错过了一段关键的短文:

可以定义字段 类后的类变量 定义结构的语句 子类,这允许创建数据 直接或间接 自我介绍:

fields类变量必须, 但是,必须在定义类型之前定义 首先创建一个实例, 对其调用sizeof,依此类推。 以后分配给字段的任务 类变量将引发 属性错误

所以,只需将这部分文档应用到代码中,您就需要将代码更改为:

看起来你已经做了一个从ctypes导入的可怕的实践,因为人们只能猜测像DWORD这样的标识符实际上来自哪里但错过了一段关键的短文:

可以定义字段 类后的类变量 定义结构的语句 子类,这允许创建数据 直接或间接 自我介绍:

fields类变量必须, 但是,必须在定义类型之前定义 首先创建一个实例, 对其调用sizeof,依此类推。 以后分配给字段的任务 类变量将引发 属性错误

所以,只需将这部分文档应用到代码中,您就需要将代码更改为:

class List(Structure):
    pass
List._fields_ = [("pnext", POINTER(List)),
                 ...
                ]
class EXCEPTION_RECORD(Structure):
    pass
EXCEPTION_RECORD._fields_ = [
        ("ExceptionCode", DWORD),
        ("ExceptionFlags", DWORD),
        ("ExceptionRecord", POINTER(EXCEPTION_RECORD)),
        ("ExceptionAddress", LPVOID),
        ("NumberParameters", DWORD),
        ("ExceptionInformation", ULONG_PTR * EXCEPTION_MAXIMUM_PARAMETERS)]