【问题标题】:Cython set variable to named constantCython 将变量设置为命名常量
【发布时间】:2018-07-20 04:37:25
【问题描述】:

我怀疑这是一个简单的问题,但我似乎无法为观察到的行为找到任何解释。假设我在由以下定义的 C 头文件中有一个常量:

#define FOOBAR 128
typedef uint32_t mytype_t;

我在 Cython 中通过将以下内容放入 .pxd 文件中进行转换:

cdef int _FOOBAR   "FOOBAR"
ctypedef uint32_t mytype_t

在我的 .pyx 文件中,我有一个声明:

FOOBAR = _FOOBAR

随后在类定义中:

cdef class MyClass:
    cdef mytype_t myvar
    def __init__(self):
        try:
            self.myvar = FOOBAR
            print("GOOD")
        except:
            print("BAD")

然后我尝试用一​​个简单的程序来执行这个:

try:
    foo = MyClass()
except:
    print("FAILED TO CREATE CLASS")

遗憾的是,这个错误出来了,但我没有收到错误消息 - 我只是得到了异常打印输出:

BAD

任何有关根本原因的建议将不胜感激。

【问题讨论】:

标签: cython cythonize


【解决方案1】:

我相信我终于找到了它。根本原因是我的代码中的FOOBAR 实际上设置为UINT32MAX。显然,Cython/Python 将其解释为 -1,然后 Python 拒绝将 uint32_t 变量设置为等于它。解决方案是将 FOOBAR 定义为 0xffffffff - 显然 Python 认为这是一个非负值并接受它。

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    相关资源
    最近更新 更多