Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CTypes回调中捕获Python异常_Python_Ctypes - Fatal编程技术网

在CTypes回调中捕获Python异常

在CTypes回调中捕获Python异常,python,ctypes,Python,Ctypes,我有一个ctypes回调函数,如下所示: def wrapper(ud, event): try: # ... except BaseException: wrapper.exc_info = sys.exc_info() return False HandlerCallback = PYFUNCTYPE(c_int, py_object, Event) cb = HandlerCallback(wrapper) # pass `

我有一个
ctypes
回调函数,如下所示:

def wrapper(ud, event):
    try:
        # ...
    except BaseException:
        wrapper.exc_info = sys.exc_info()
        return False

HandlerCallback = PYFUNCTYPE(c_int, py_object, Event)
cb = HandlerCallback(wrapper)
# pass `cb` to a C function

exc_info = getattr(wrapper, 'exc_info', None)
if exc_info:
    six.reraise(*exc_info)
不幸的是,这并没有占据100%的可能案例。我遇到了一个
KeyboardInteruppt
问题,它似乎是在调用C函数和调用
wrapper()
之间出现的。不幸的是,回溯毫无帮助


是否可以让
PYFUNCTYPE
包装器捕获任何异常,而不是打印它们,然后将它们交还给我,这样我就可以在C函数调用后重新调用异常?

回调是否在另一个线程上异步调用?如果是这种情况,它就不可能看到
键盘中断
。Python只在其主线程上运行信号处理程序。它有一个C信号处理功能,在信号跳闸时设置标志。然后在主线程上调用处理程序,该处理程序可能会引发异常,也可能不会引发异常。对于
SIGINT
,Python的
信号.default\u int\u处理程序
会引发
键盘中断