Python windows错误0是什么;错误“U成功”;什么意思?

Python windows错误0是什么;错误“U成功”;什么意思?,python,windows,windowserror,Python,Windows,Windowserror,我编写了一个python程序,它通过管道重定向读取另一个进程的标准输出。 但是,该程序在这一行很糟糕: print "[Input Thread] ", self.inputPipe.readline(ii) 错误为IOError:[Errno 0]错误 我找到了windows错误0的解释。因为它被定义为: 操作已成功完成 为什么成功完成的操作会导致错误?我知道这有点陈旧,但花了相当多的时间试图找到一个完整的答案,但没有成功。所以我想和大家分享我的发现 关于这种情况如何发生的完整答案是,您调用

我编写了一个python程序,它通过管道重定向读取另一个进程的标准输出。 但是,该程序在这一行很糟糕:

print "[Input Thread] ", self.inputPipe.readline(ii)
错误为IOError:[Errno 0]错误

我找到了windows错误0的解释。因为它被定义为:

操作已成功完成


为什么成功完成的操作会导致错误?

我知道这有点陈旧,但花了相当多的时间试图找到一个完整的答案,但没有成功。所以我想和大家分享我的发现

关于这种情况如何发生的完整答案是,您调用的pInvoke方法“失败”,但不是因为错误

你觉得呢

例如,让我们假设您需要解开一个windows钩子,但它会被调用两次,因为在您的对象体系结构中有一点意大利面条或偏执的防御编程

// hook assigned earlier

// now we call our clean up code
if (NativeMethods.UnhookWindowsHookEx(HookHandle) == 0)
{
    // method succeeds normally so we do not get here
    Log.ReportWin32Error("Error removing hook", Marshal.GetLastWin32Error());
}

// other code runs, but the hook is never reattached, 
// due to paranoid defensive program you call your clean up code twice
if (NativeMethods.UnhookWindowsHookEx(HookHandle) == 0)
{
    // pInvoke method failed (return zero) because there was no hook to remove
    // however there was no error, the hook was already gone thus ERROR_SUCCESS (0)
    // is our last error
    Log.ReportWin32Error("Error removing hook", Marshal.GetLastWin32Error());
}

这个名字可以欺骗你,但ERROR\u SUCCESS实际上意味着没有错误。
发件人:

错误\u成功

0(0x0)
操作已成功完成


windows API可能很棘手。最有可能的是,您提到的第二个程序没有正确检索错误号。它要么被覆盖,要么根本没有被拉进去;因此它默认为0

你没有说另一个节目是什么;但例如,在.net中,在声明外部调用时很容易忽略“SetLastError”标志

[DllImport('kernel32.dll', SetLastError = true)]

通常当您收到错误代码
0
时,这通常表示成功(如没有问题)。显然,无论您在那里做了什么,都认为有问题,并在没有问题的情况下打印了“错误消息”。
error\u SUCCESS
在WinAPI中表示“无错误”。它的前缀为ERROR_uu,位于同一人工“define namespace”中。我会更加注意IOError位,尽管我不知道是什么导致它。