Ошибка пустого Декларатора при цитировании класса?


Я пытаюсь скомпилировать следующий файл .pyx с помощью Cython:

import collections

nil = object()  # used to distinguish from None

class TrieNode(object):
    __slots__ = ['char', 'output', 'fail', 'children']
    def __init__(self, char):
        self.char = char
        self.output = nil
        self.fail = nil
        self.children = {}

    def __repr__(self):
        if self.output is not nil:
            return "<TrieNode '%s' '%s'>" % (self.char, self.output)
        else:
            return "<TrieNode '%s'>" % self.char

И Cython выдает эту ошибку:

running build_ext
cythoning TrieNode.pyx to TrieNode.c

Error compiling Cython file:
------------------------------------------------------------
...

nil = object()  # used to distinguish from None

class TrieNode(object):
        __slots__ = ['char', 'output', 'fail', 'children']
        def __init__(self, char):
                       ^
------------------------------------------------------------

TrieNode.pyx:7:24: Empty declarator

building 'TrieNode' extension
C:Program Files (x86)Microsoft Visual Studio 9.0VCBINamd64cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IE:Python26include -IE:Python26PC /Tc
TrieNode.c /Fobuildtemp.win-amd64-2.6ReleaseTrieNode.obj
TrieNode.c
TrieNode.c(1) : fatal error C1189: #error :  Do not use this file, it is the result of a failed Cython compilation.
error: command 'cl.exe' failed with exit status 2

Мой setup.py в настоящее время выглядит так:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = [Extension("TrieNode", ["TrieNode.pyx"])]
)

Я видел пример, когда класс Python был скомпилирован в файл Cython без проблем, но этот, похоже, не работает. Может ли кто-нибудь сказать мне, чего мне не хватает?

1 2

1 ответ:

В вашем методе __init__ у вас есть переменная с именем char. Если вы Цитонизируете модуль. py, это нормально. Однако на Cython .pyx-файл, даже функции Python def могут иметь объявления типа C в параметрах .