Python C API: como obter representação em cadeia de exceção?
-
05-07-2019 - |
Pergunta
Se eu fizer (por exemplo).
open("/snafu/fnord")
em Python (e o arquivo não existe), eu recebo um rastreamento ea mensagem
IOError: [Errno 2] No such file or directory: '/snafu/fnord'
Gostaria de obter a seqüência acima, com C API do Python (ou seja, um interpretador Python incorporado em um programa C). Preciso dela como uma string, não a saída para o console.
Com PyErr_Fetch()
posso obter o objeto tipo de exceção e o valor. Para o exemplo acima, o valor é uma tupla:
(2, 'No such file or directory', '/snafu/fnord')
Existe uma maneira fácil a partir das informações que recebo de PyErr_Fetch()
para a cadeia os shows interpretador Python? (Um que não envolve a construção de tais cordas para cada tipo de exceção si mesmo.)
Solução
Eu acho que as exceções do Python são impressos executando "str ()" na instância exceção, que irá retornar a string formatada você está em interessado Você pode obter isso de C chamando o PyObject_Str()
método descrito aqui:
https://docs.python.org/c-api/object.html
Boa sorte!
Update: Estou um pouco confuso por que o segundo elemento a ser devolvido a você por PyErr_Fetch()
é uma string. Meu palpite é que você está recebendo um "exceção unnormalized" e necessidade de PyErr_NormalizeException()
chamado para transformar isso tupla em um Exception "verdadeiro" que pode formatar-se como uma string como você quer que ele.