在python中处理c库错误?
问题描述:
如果我用C语言编写Python中的lib下,如zlib,我得到这样一个错误:在python中处理c库错误?
error: Error -3 while decompressing: invalid distance too far back
如何处理这个异常是Python?大概这个异常是在c模块中定义的,并且没有像except SomeException
这样的异常类被捕获?
答
要从Python中调用C函数,必须使用Python函数包装C函数。对于CPython,可以使用诸如Swig之类的包,Cython或Python中的包来帮助编写包装器,并使用模块的帮助来编写包装器。包装器必须将Python输入转换为C值,定义C输出变量,调用C函数,检查返回代码,并将C输出转换为Python并将其返回或将C代码翻译为Python异常并将其提升。
看来您正在使用Python的zlib
,它包装了一个C 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
。