我有一个 C++ 函数,它通过 Boost::Python 从许多 Python 函数中调用。当 C++ 函数检测到错误参数时,我想写一条日志消息并继续处理。在该日志消息中,我想记下调用 C++ 的 Python 模块和行号。我怎样才能做到这一点?
我能够从 C++ 中抛出一个异常,该异常被翻译成我可以捕获的 Python 异常,但这会中止我无法拥有的 C++ 函数。
例如,假设我想在 factorial() 收到小于一的数字时记录一条警告消息。忽略它可以轻松处理此案(并且确实如此)的事实——我的老板无论如何都想要一个警告。;)
此代码可以直接从 Python 调用,也可以从从 Python 调用的其他 C++ 函数调用,因此 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++ 中提供这种能力。