我有一个用Cython包装的函数:
cdef extern  from "myheader.h":
   int c_my_func (const_char *a, const_char* b)
并且一个暴露给Python的函数:
def my_func(a, b):
    c_my_func(a, b)
该函数c_my_func接受参数a和NULL b.当我从口译员那里打电话时:
my_func(None, None)
它抛出异常:
TypeError: expected string or Unicode object, NoneType found
如何使此功能接受None并传递NULL给c_my_func?我不想手动检查None然后传递NULL.我也尝试在cdef上使用默认参数,但c_my_func它不起作用.
您可以在Cython FAQ中找到答案.
None与任何C类型都不兼容.为了适应这种情况,默认行为是具有cdefed参数的函数也接受None.
- 如果要考虑
None无效输入,则需要编写检查它的代码,并引发适当的异常.
解决方案是在None编写时手动检查并传递NULL.
| 归档时间: | 
 | 
| 查看次数: | 2878 次 | 
| 最近记录: |