diff --git a/comtypes/_comobject.py b/comtypes/_comobject.py index d3fca7104..318d36ccd 100644 --- a/comtypes/_comobject.py +++ b/comtypes/_comobject.py @@ -47,16 +47,17 @@ def HRESULT_FROM_WIN32(errcode): def winerror(exc): """Return the windows error code from a WindowsError or COMError instance.""" - try: - code = exc[0] + if isinstance(exc, COMError): + return exc.hresult + elif isinstance(exc, WindowsError): + code = exc.winerror if isinstance(code, (int, long)): return code - except IndexError: - pass - # Sometimes, a WindowsError instance has no error code. An access - # violation raised by ctypes has only text, for example. In this - # cases we return a generic error code. - return E_FAIL + # Sometimes, a WindowsError instance has no error code. An access + # violation raised by ctypes has only text, for example. In this + # cases we return a generic error code. + return E_FAIL + raise TypeError("Expected comtypes.COMERROR or WindowsError instance, got %s" % type(exc).__name__) def _do_implement(interface_name, method_name): diff --git a/comtypes/client/_events.py b/comtypes/client/_events.py index 12264dc9a..b9e6afeb3 100644 --- a/comtypes/client/_events.py +++ b/comtypes/client/_events.py @@ -276,7 +276,7 @@ def HandlerRoutine(dwCtrlType): len(handles), handles, ctypes.byref(ctypes.c_ulong())) except WindowsError, details: - if details.args[0] != RPC_S_CALLPENDING: # timeout expired + if details.winerror != RPC_S_CALLPENDING: # timeout expired raise else: raise KeyboardInterrupt