这个简短的功能只是获取存储设备的可用空间,但运行代码时出现上述错误。
功能是:
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'的值,它已经消失并找到了正确的值,但仍然给出错误。
可能导致此问题的原因是什么?
答案 0 :(得分:4)
您没有调用我认为会导致访问冲突(由于随机内存写入)和错误导致的完整功能签名。完整的功能签名是(完整记录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
我能够在没有间歇性错误的情况下运行它。