Как продолжить выполнение модуля Python, который вызывает сбойную функцию C ++? - PullRequest
1 голос
/ 20 апреля 2020

У меня есть python файл (app.py), который выполняет вызов функции следующим образом:

answer = fn1()

fn1 () на самом деле написан на C ++, и я создал оболочку так что я могу использовать его в Python. Функция fn1 () может либо вернуть действительный результат, либо иногда может завершиться ошибкой и завершиться. Теперь проблема в том, что в тот момент, когда fn1 () завершается с ошибкой и прерывается, вызывающий файл (то есть app.py) также завершается и не go переходит к части обработки ошибок. Я хотел бы, чтобы вызывающий файл переместился в мою часть обработки ошибок (т.е. «кроме» и «наконец»), если fn1 () прерывает и выдает дамп ядра. Есть ли способ добиться этого?

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

Из OP:

Файл C ++, который я создал, обертывает вокруг прерываний в случае исключения и сбрасывает ядро. Python код ошибки не выполняется

Это не было очевидно в вашем вопросе. Чтобы поймать ошибку такого рода, вы можете использовать функцию signal.signal в стандартной библиотеке python ( соответствующий ответ SO ).

import signal

def sig_handler(signum, frame):
    print("segfault")

signal.signal(signal.SIGSEGV, sig_handler)

answer = fn1()

Вы в основном написали ответь на твой вопрос. Используйте блок try except finally. См. Также документацию Python3 по обработке ошибок

try:
    answer = fn1()
except Exception:  # You can use an exception more specific to your failing code.
    # do stuff
finally:
    # do stuff
.
1 голос
/ 20 апреля 2020

Что вам нужно сделать, это перехватить исключение в вашей функции C ++, а затем преобразовать его в исключение python и вернуть его в код python.

...