在使用cdef语句声明的cython函数和方法中,可能会引发python错误,必须在声明中使用某个版本的except -1
声明。更多信息here
我想知道如果在父类型中未使用except -1
定义该方法,是否可以在扩展类型的方法上使用except -1
。一个例子可能会有所帮助。我希望LazyCow
在调用moo
时引发异常。这适用于beLazy
,因为父Cow
类型没有匹配方法,但对于moo
方法,则忽略该异常。
cdef class Cow:
cdef int moo(self):
print 'moooooooo'
return 0
cdef class LazyCow(Cow):
cdef int moo(self) except -1:
raise ValueError("I don't want to moo")
cdef int beLazy(self) except -1:
raise ValueError("I don't want to be lazy")
def run():
cdef LazyCow cow
cow = LazyCow()
print "Running moo"
cow.moo()
print ""
print "Running beLazy"
cow.beLazy()
当我调用run时,我得到以下内容,moo
中引发的错误将被忽略,但beLazy
会按预期工作。
Running moo
Exception ValueError: ValueError("I don't want to moo",) in 'cowExample.LazyCow.moo' ignored
Running beLazy
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-157c9bda2cd6> in <module>()
----> 1 run()
/tmp/cowExample.so in cowExample.run (cowExample.c:784)()
/tmp/cowExample.so in cowExample.LazyCow.beLazy (cowExample.c:685)()
ValueError: I don't want to be lazy
我的问题,这是cython中的一个错误吗?如果不是,为什么我不能A)得到我期望的行为,或者B)在编译时得到警告/错误,我的方法声明不匹配。