Ritornare ad eseguire il try dopo che entra in except

di Fabiux il
2 risposte

Come dice la discussione ho il problema che devo eseguire nuovamente l'istruzione dentro al try dopo che ho gestito una eccezione con except e non so proprio come fare. Dopo che ha gestito il primo except blocca il calcolo giustamente, ma io dovrei continuare a calcolare con il metodo del try :(

Questo è lo stralcio di codice che mi ha portato a questo dubbio. 

for i in range(1,len(RL)-2,3):  #angle every three points
    #condition for having a measurable angle
    if (RL[i][1] < RL[i-1][1]) and (RL[i][1] < RL[i+1][1]):
        try:
            primo_ang = -(math.atan((RL[i][1]-RL[i-1][1])/(RL[i][0]-RL[i-1][0])))*180/math.pi
            secondo_ang = 180-(math.atan((RL[i+1][1]-RL[i][1])/(RL[i+1][0]-RL[i][0])))*180/math.pi
            angolo = abs(secondo_ang-primo_ang)    
            print(angolo)
            
        except ZeroDivisionError:
            primo_ang = 90
            secondo_ang = 180-(math.atan((RL[i+1][1]-RL[i][1])/(RL[i+1][0]-RL[i][0])))*180/math.pi
            angolo = abs(secondo_ang-primo_ang)    
            print(angolo)
        
            
            
       # except ZeroDivisionError:
       #     primo_ang = -(math.atan((RL[i][1]-RL[i-1][1])/(RL[i][0]-RL[i-1][0])))*180/math.pi
       #     secondo_ang = 90
       #     angolo = abs(secondo_ang-primo_ang)    
       #     print(angolo)

La parte commentata in fondo è un plus per gestire un secondo errore che però è sempre una divisione per zero ma va gestita diversamente dalla prima, se riuscite ad aiutarmi anche con quest'ultima cosa ve ne sarei grato. Saluti a tutti.

2 Risposte

  • 12/09/2023 - Fabiux ha scritto:


    Dopo che ha gestito il primo except blocca il calcolo giustamente, ma io dovrei continuare a calcolare con il metodo del try :(

    Quando usi except, l'errore viene “assorbito” in quanto “gestito”, quindi il codice prosegue normalmente, a meno che non se ne verifichi un altro ancora.

    Credo che si debba chiarire meglio la questione.

  • Ma che poi, è davvero necessario gestire l'eccezione? Non sarebbe più comodo/efficiente impostare

    if RL[i][0] == RL[i-1][0]:
    	primo_ang = 90
    else:
    	primo_ang = -(math.atan((RL[i][1]-RL[i-1][1])/(RL[i][0]-RL[i-1][0])))*180/math.pi

    La divisione per zero non può avvenire a meno che quei valori non siano uguali… Similmente per la seconda variabile.

Devi accedere o registrarti per scrivere nel forum
2 risposte