voglio generare una stringa di una riga da un Exception
che mi dice cosa accaduto dove (non hanno bisogno di un backtrace completo). Le seguenti informazioni sarebbe bello:modo corretto per ottenere bella stringa dal eccezione
- nome del file/LineNumber
- tipo di eccezione
- descrizione eccezione (quello che si ottiene da
str(e)
) - bello avere: la funzione/metodo/classe
Attualmente faccio quanto segue:
import os
...
try:
os.nonexisting()
except Exception as e:
t = e.__traceback__
tbf = e.__traceback__.tb_frame
print('%s:%d: %s in %s(): "%s" ' %
os.path.basename(tbf.f_code.co_filename),
t.tb_lineno,
e.__class__.__name__,
tbf.f_code.co_name, e))
che mi dà:
foo.py:203: AttributeError in foo(): "'module' object has no attribute 'nonexisting'"
Esiste un modo più elegante per stampare le indicazioni riportate in questo esempio? Sto pensando a s.th. come
print(e.format('%f: %l: %t %F: "%w"'))
Vorrei evitare di importare moduli aggiuntivi, tranne ce ne è uno esattamente per questo scopo.
Produce '[ "AttributeError: oggetto 'modulo' non ha alcun attributo 'inesistente' \ n"]' non è questo che vuole OP (dove è il nome del file, il numero di riga, la funzione/metodo di nome?). – jfs
In effetti il problema è aggiungere le informazioni sul numero di file/linea a 'format_exception()' senza manipolare le parti interne di 'sys.exc_info()', 'extract_tb', ecc. – frans