Python: WindowsError: exception: access violation reading 0x00000000
Python: WindowsError: exception: access violation reading 0x00000000
这个简短的功能只是获取可用的免费 space 存储设备,但是当 运行 代码时出现上述错误。
函数是:
def disk_space1(drive):
freespace = ctypes.c_ulonglong()
calcspace = ctypes.windll.kernel32.GetDiskFreeSpaceExA
calcspace(drive, ctypes.byref(freespace))
disk_size = freespace.value
return disk_size
这个功能一直很好用,直到今天它无故停止工作,我没有做任何改变。最让我困惑的是函数正常工作,如果我打印出 'freespace' 一次 运行 的值,它已经找到了正确的值,但仍然给出错误。
是什么导致了这个问题?
您没有调用完整的函数签名,我认为这会导致访问冲突(由于随机内存写入)和错误。完整的函数签名是(完整记录 here):
BOOL WINAPI GetDiskFreeSpaceEx(
_In_opt_ LPCTSTR lpDirectoryName,
_Out_opt_ PULARGE_INTEGER lpFreeBytesAvailable,
_Out_opt_ PULARGE_INTEGER lpTotalNumberOfBytes,
_Out_opt_ PULARGE_INTEGER lpTotalNumberOfFreeBytes
);
通过将函数更改为:
def disk_space(drive):
freespace = ctypes.c_ulonglong()
calcspace = ctypes.windll.kernel32.GetDiskFreeSpaceExA
err = calcspace(drive,
ctypes.byref(freespace),
None,
None)
assert err != 0, 'calcspace failed'
disk_size = freespace.value
return disk_size
我能够 运行 它没有间歇性错误。
这个简短的功能只是获取可用的免费 space 存储设备,但是当 运行 代码时出现上述错误。
函数是:
def disk_space1(drive):
freespace = ctypes.c_ulonglong()
calcspace = ctypes.windll.kernel32.GetDiskFreeSpaceExA
calcspace(drive, ctypes.byref(freespace))
disk_size = freespace.value
return disk_size
这个功能一直很好用,直到今天它无故停止工作,我没有做任何改变。最让我困惑的是函数正常工作,如果我打印出 'freespace' 一次 运行 的值,它已经找到了正确的值,但仍然给出错误。
是什么导致了这个问题?
您没有调用完整的函数签名,我认为这会导致访问冲突(由于随机内存写入)和错误。完整的函数签名是(完整记录 here):
BOOL WINAPI GetDiskFreeSpaceEx(
_In_opt_ LPCTSTR lpDirectoryName,
_Out_opt_ PULARGE_INTEGER lpFreeBytesAvailable,
_Out_opt_ PULARGE_INTEGER lpTotalNumberOfBytes,
_Out_opt_ PULARGE_INTEGER lpTotalNumberOfFreeBytes
);
通过将函数更改为:
def disk_space(drive):
freespace = ctypes.c_ulonglong()
calcspace = ctypes.windll.kernel32.GetDiskFreeSpaceExA
err = calcspace(drive,
ctypes.byref(freespace),
None,
None)
assert err != 0, 'calcspace failed'
disk_size = freespace.value
return disk_size
我能够 运行 它没有间歇性错误。