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



_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

Rispondere a