在python中处理c库错误?

时间:2016-11-10 16:43:35

标签: python exception shared-libraries

如果我在python中使用用c编写的lib,比如zlib,我会收到如下错误:

error: Error -3 while decompressing: invalid distance too far back

如何处理这个异常是python?可能是在c模块中定义了异常,并且没有像except SomeException那样可以捕获的异常类?

1 个答案:

答案 0 :(得分:1)

要从Python调用C函数,C函数必须由Python函数包装。对于CPython,可以使用Swig,Cython等软件包或在ctypes模块的帮助下使用Python编写包装器。包装器必须将Python输入转换为C值,定义C输出变量,调用C函数,检查返回代码,并将C输出转换为Python并将其返回或将C代码转换为Python异常并引发它。 / p>

您似乎正在使用包含C zlib的Python zlib。它定义了一个Python异常类error

>>> import zlib
>>> zlib.error
<class 'zlib.error'>
>>> issubclass(zlib.error, Exception)
True

你像任何其他例外一样抓住它。

>>> try:
    raise zlib.error('Error 99: unknown')
except zlib.error as e:
    print(e)

Error 99: unknown

为了与异常命名约定保持一致,我将它命名为ZlibError