Cython: передать исключение в файл и прервать явно - PullRequest
0 голосов
/ 22 мая 2018

У меня есть два вопроса относительно использования Cython.

1> Как я могу передать возбужденные исключения в файл?

Я пробовал следующий методно это не работает.

$ python python_cython_example.py 2>&1 > /tmp/hello.txt

Созданное исключение все равно будет напечатано на экране вместо файла

2> Как выйти из программы в модуле Cython?

Во время отладочной фразы я хотел бы явно выйти из приложения, но sys.exit не работает для меня.Есть ли у меня другие варианты?

1 Ответ

0 голосов
/ 22 мая 2018

Для перенаправления в файл (моя ссылка https://askubuntu.com/questions/625224/how-to-redirect-stderr-to-a-file):

python3 python_cython_example.py 2>hello.txt

Это просто перенаправление stderr (не stdout) в файл. Я не думаю, что Cython ведет себя иначе, чем Python здесь.


Что касается sys.exit, у меня работает следующее:

pyx file:

def f():
    import sys
    sys.exit()

py file:

import pyximport; pyximport.install()
import cy_exc

cy_exc.f()
print("This line is not run")

Вы также можете использовать встроенный exit() (который также работает для меня), но работает по довольно похожему механизму.

Документация для sys.exit говорит, что он завершаетсяВызывая исключение. Поэтому вам нужно убедиться, что вы не перехватываете это исключение (например, с помощью универсального блока except:). Если вы вызываете его из функции cdef, не возвращающей объект, который выВам нужно будет убедиться, что знает, что Cython проверяет наличие исключений со спецификацией except. Если вы вызываете его из другого потока, вам может понадобиться другой механизм сигнализации (но я думаю, что Cython prangeконструкция должна уметь справляться)

Если этона самом деле не работает для вас, вы также можете позвонить os._exit.Это пропускает всю очистку, которую обычно выполняет Python (например, очистка и закрытие открытых файлов).Вполне вероятно, что он будет работать в большем количестве случаев, поскольку он не реализован в качестве исключения.

...