[Python] Info su cancellazione traceback

Matteo Boscolo matteo.boscolo a boscolini.eu
Sab 19 Nov 2022 08:45:00 CET


Buongiorno a tutti,

vorrei cancellare il traceback di python e mostrare solo il mio raise, 
questa cosa mi serve per evitare che lo stack dell'errore venga visto in 
console.

ho provato con questo decoratore

def avoid_traceback(message=''):
     ''' call a function a number of times '''
     def decorate(fn):
         @wraps(fn)
         def wrapper(*args, **kwargs):
             try:
                 result = fn(*args, **kwargs)
             except Exception as ex:
                 if message:
                     raise Exception(message)
                 raise Exception("Error on method %s" % fn.__name__)
             return result
         return wrapper
     return decorate


che funziona, ma il traceback resta attivo, nel senso che se metto

traceback.print_exc()

mi vedo tutto lo stack dell'errore:

Traceback (most recent call last):
   File "/media/OneTDisk/workspace/test.py", line 133, in wrapper
     result = fn(*args, **kwargs)
   File "/media/OneTDisk/workspace/test.py", line 218, in rise
     raise Exception("rise")
Exception: rise


potete provare con questo esempietto qua:

class A(object):
     def __init__(self):
         pass

     @avoid_traceback("errore generico")#
     def rise1(self):
         return self.rise()

     @avoid_traceback("errore generico")#
     def rise(self):
         raise Exception("rise")
a=A()
a.rise1()
traceback.print_exc()

ho trovato in rete

https://www.programcreek.com/python/example/119512/traceback.clear_frames

ma sembra che non funzioni..

qualche idea ?

grazie mille

Matteo





Maggiori informazioni sulla lista Python