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