Ich arbeite an einem Raspberry PI mit Python 3.4.2 mit Cython 0.24 und GCC 4.9.1.
Ich möchte eine cpdef enum
verwenden, die eine PEP 435 Stil Python Enum (seit Python 3.4 verfügbar) erstellt. Dieses Merkmal wurde in Cython 0.21 eingeführt.Was ist der Grund für diesen Cython-Kompilierfehler beim Deklarieren eines cpdef-Enums?
Ich bin mit dem folgenden Quelltext:
#lib.h file
typedef enum { A, B, C, D } test;
#lib.pyx file
cdef extern from "lib.h":
cpdef enum test:
A, B, C, D
def t1():
for t in test: print(t.value)
jedoch sagen mehrere Kompilierungsfehler einige Zeit mehr oder weniger das gleiche wie:
- lib.c:4664:20: error: invalid application of 'sizeof' to incomplete type 'enum test'
- lib.c:2599:45: error: type of formal parameter 1 is incomplete __pyx_t_4 = __Pyx_PyInt_From_enum__test(C); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 56, __pyx_L1_error)
In einer interaktiven Shell Ich lief:
>>> from enum import Enum
>>> Enum
<enum 'Enum'>
Offensichtlich scheint das Modul vorhanden zu sein und zu funktionieren.
Meine Frage ist: Was könnte die Ursache für diese Fehler sein?
Oder 'CPDEF Enum Test'as ich in der Einleitung erwähnt. "Enums können jetzt als cpdef deklariert werden, um ihre Werte in den Python-Namespace des Moduls zu exportieren." [Cython Changelog] (https://github.com/cython/cython/blob/master/CHANGES.rst#021-2014-09-10). Vielleicht liest du meine Frage noch einmal ... –
Wenn ich es wäre, würde ich es versuchen/alt, um sicher zu sein, dass das Problem liegt, wo ich denke, dass es liegt, und wenn ich sicher bin, was die Ursache ist Ich würde die Situation beheben. Aber das bin nur ich. – boardrider
Keine Probleme auf die alte Art und Weise. –