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.)

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top