Cython __pyx_r 可能在此函数中未初始化使用

Posted

技术标签:

【中文标题】Cython __pyx_r 可能在此函数中未初始化使用【英文标题】:Cython __pyx_r may be used uninitialized in this function 【发布时间】:2016-07-21 15:03:52 【问题描述】:

我正在尝试利用 cython 为我的 C++ 实用程序提供一个包装器。我试图使其可访问的一个这样的函数是一个访问器,它根据文件类型返回一个枚举。

这是我在 cython 中重新定义函数的方式:

cdef extern from "reader.h" namespace "magic_number":
   enum mcr_magic_number_t:                                                                              
      MDI = 0                                                                                            
      EOT                                                                                                
      RV                                                                                                 
      UNKNOWN  

然后在我的reader.pxd 文件中

cpdef mcr_magic_number_t magic_number(self)

然后在我的reader.pyx 文件中

cpdef mcr_magic_number_t magic_number(self):            
   """                                           
   :return: the magic_number enum                       
   :rtype: mcr_magic_number_t                           
   """                                                  
   return self.thisptr.magic_number() 

现在,当我去编译这个时,我得到一个警告

warning: ‘__pyx_r’ may be used uninitialized in this function

有人知道如何最好地解决这个问题吗?我尝试在谷歌上搜索解决方案,但我得到的只是其他人报告相同 __pyx_r 警告的页面。也许有一种方法可以设置默认值或确保它始终在 cython 中初始化?

【问题讨论】:

我怀疑这不是问题。但是,如果有疑问,请查看 C 以了解它未初始化的情况。不幸的是,不知道 self.thisptr 是什么,其他人实际上不可能查看。 【参考方案1】:

尝试检查 self.thisptr 的非 NULL 值:

if <void*>self.thisptr != NULL:
    return self.thisptr.magic_number() 

【讨论】:

以上是关于Cython __pyx_r 可能在此函数中未初始化使用的主要内容,如果未能解决你的问题,请参考以下文章

Cython 和重载的 c++ 构造函数

Cython 生成的 C++ 代码中可能存在的错误

参数类型不兼容且在此函数中未初始化

opencv中未声明的'true'(首次在此函数中使用)[重复]

『Python CoolBook』Cython

如何使用 Cython 向 Python 公开返回 C++ 对象的函数?