cython
1PYTHON setup.py build_ext --inplace
2PYTHON -c "import foo"
3PYTHON -c "import a; a.test()"
4
5######## setup.py ########
6
7from Cython.Build import cythonize
8from distutils.core import setup
9
10setup(
11ext_modules = cythonize("*.pyx"),
12)
13
14######## foo.pxd ########
15
16cdef int bar(int i) except *
17
18cdef int (*var_opt)(int) except? -1
19cdef int (*var_orig)(int) except *
20
21######## foo.pyx ########
22
23cdef int bar(int i) except *:
24if i == 10:
25raise ValueError()
26return i + 1
27
28var_opt = bar # by 'accident' of optimisation
29var_orig = bar # by declaration
30
31######## a.pyx ########
32
33cimport cython
34from foo cimport bar, var_orig, var_opt
35
36def test():
37assert bar(-2) == -1
38try:
39bar(10)
40except ValueError:
41pass
42else:
43assert False, "exception not raised in bar()"
44
45assert var_orig(-2) == -1
46try:
47var_orig(10)
48except ValueError:
49pass
50else:
51assert False, "exception not raised in var_orig()"
52
53assert var_opt(-2) == -1
54try:
55var_opt(10)
56except ValueError:
57pass
58else:
59assert False, "exception not raised in var_opt()"
60