2011-11-11 7 views
2

私はCythonを使用して、次の.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.0\VC\BIN\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IE:\Python26\include -IE:\Python26\PC /Tc 
TrieNode.c /Fobuild\temp.win-amd64-2.6\Release\TrieNode.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ファイルにコンパイルされた例を見ましたが、これは動作していないようです。誰かが私に行方不明を教えてもらえますか?

+0

@eryksun:それは変です。私は同じバージョンを使用しています。あなたは64ビットマシンも使用していますか? – Legend

+1

@eryksun:ロックスター! 'char'を' _char'に変更して正しくコンパイルしました。これを回答として投稿して受け入れることができますか? – Legend

答えて

5

__init__メソッドでは、charという名前の変数があります。あなたが.pyモジュールをCython化するなら、これは問題ありません。しかし、Cythonの.pyxファイルでは、Python def関数でもC type declarations in the parametersを持つことができます。

+0

+1ありがとうございました:) – Legend

関連する問題