cython

Форк
0
/
pxd_signature_excvalue.srctree 
59 строк · 1.1 Кб
1
PYTHON setup.py build_ext --inplace
2
PYTHON -c "import foo"
3
PYTHON -c "import a; a.test()"
4

5
######## setup.py ########
6

7
from Cython.Build import cythonize
8
from distutils.core import setup
9

10
setup(
11
  ext_modules = cythonize("*.pyx"),
12
)
13

14
######## foo.pxd ########
15

16
cdef int bar(int i) except *
17

18
cdef int (*var_opt)(int) except? -1
19
cdef int (*var_orig)(int) except *
20

21
######## foo.pyx ########
22

23
cdef int bar(int i) except *:
24
    if i == 10:
25
        raise ValueError()
26
    return i + 1
27

28
var_opt = bar   # by 'accident' of optimisation
29
var_orig = bar  # by declaration
30

31
######## a.pyx ########
32

33
cimport cython
34
from foo cimport bar, var_orig, var_opt
35

36
def test():
37
    assert bar(-2) == -1
38
    try:
39
        bar(10)
40
    except ValueError:
41
        pass
42
    else:
43
        assert False, "exception not raised in bar()"
44

45
    assert var_orig(-2) == -1
46
    try:
47
        var_orig(10)
48
    except ValueError:
49
        pass
50
    else:
51
        assert False, "exception not raised in var_orig()"
52

53
    assert var_opt(-2) == -1
54
    try:
55
        var_opt(10)
56
    except ValueError:
57
        pass
58
    else:
59
        assert False, "exception not raised in var_opt()"
60

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.