У меня есть функция C ++, которая вызывается из многих функций Python через Boost :: Python. Когда функция C ++ обнаруживает неверные аргументы, я хочу написать сообщение журнала и продолжить обработку. В этом сообщении я хотел бы отметить модуль Python и номер строки, которая вызывается в C ++. Как я могу это сделать?
Я могу выдать исключение из C ++, которое переведено в исключение Python, которое я могу перехватить, но оно прерывает функцию C ++, которую я не могу иметь.
Например, допустим, я хочу записать предупреждение, если factorial () получает число меньше единицы. Не обращайте внимания на тот факт, что он может легко справиться с делом (и делает это) - мой босс все равно хочет получить предупреждение. ;)
Этот код может вызываться непосредственно из Python или из других функций C ++, которые вызываются из Python, поэтому сама трассировка стека C ++ не очень полезна.
int factorial(int n) {
if (n < 1) {
logMsg("invalid n passed to factorial() at %s, line %d",
<python-module>, <python-line-number>);
}
return n <= 1 ? 1 : n * factorial(n - 1);
}
Я надеюсь, что библиотека Boost :: Python предоставляет эту возможность из C ++.