# mode: run
# ticket: gh1888
PYTHON setup.py build_ext --inplace
PYTHON -c "import a; a.test()"
######## setup.py ########
from Cython.Build.Dependencies import cythonize
from distutils.core import setup
setup(
ext_modules=cythonize("a.pyx"),
)
######## a.pxd ########
cdef int do_stuff(int foo) except -1
######## a.pyx ########
cdef int do_stuff(int bar) except -1:
if bar == 0:
raise ValueError()
return bar
cdef call_do_stuff(int x):
# The keyword argument name is surprising, but actually correct.
# The caller signature is defined by the .pxd file, not the implementation.
return do_stuff(foo=x)
def test():
assert do_stuff(1) == 1
assert do_stuff(foo=1) == 1
assert call_do_stuff(1) == 1
try:
do_stuff(0)
except ValueError:
pass
else:
assert False, "exception not raised"
try:
call_do_stuff(0)
except ValueError:
pass
else:
assert False, "exception not raised"