2012-11-20 1 views
2

Y at-il un comportement spécial lors de la décrémentation d'une variable dans la clause except? sid continue à incrémenter jusqu'à ce qu'il entre dans la clause d'exception, puis il conserve simplement la même valeur pour la durée de repos de la boucle for.python comportement peu clair lors de la décrémentation dans try-except

7 sur 105 tente jeter une exception

il n'y a pas d'impression "Fehlercode:", errorcode

Voici mon code:

for bid in range(bidStart, bidEnd + 1): 
    for syn in getSynsProBeitrag(bid): 
     try: 
      sid += 1 
      query = "INSERT INTO zuord (bid, hid, sid) VALUES(%s, %s, %s)" 
      cursor.execute(query, [bid, hid, sid]) 
      query2 = "INSERT INTO synonyme (synonym) VALUE (%s)" 
      cursor.execute(query2, syn) 

     except MySQLdb.IntegrityError, message: 
      errorcode = message[0]  
      if errorcode == 1062:  
       sid -= 1 
       print sid 
      else: 
       print "Fehlercode:", errorcode 

résolu: après la query2 lance sa première exception la première requête provoque également une (même) IntegrityError et puis il va juste et-vient comme colleen a dit

Répondre

1

Eh bien vous le décrémentez dans l'excep clause, puis l'incrémenter dans l'essai, donc il va juste et vient .... si elle échoue la première fois, il va continuer à échouer.

par exemple.

try: 
1 
try: 
1+1=2 ->fail->id-1=1 
try: 
1+1=2 ->fail->id-1=1 
try: 
1+1=2 ->fail->id-1=1 
try: 
1+1=2 ->fail->id-1=1 
.... 

etc.

Si vous essayez de sauter l'ID qui a échoué, ne décrémenter pas.

+0

Salut, j'ai essayé de ne pas le décrémenter lorsque l'exception est levée, mais j'ai des trous dans les identifiants. l'exception est levée lors de l'exécution query2 (la table (colonne) a un index unique) – Mirko

+0

Je suis confus par ce que vous entendez par "lorsque l'exécution query2 (la table (colonne) a un index unique" - si vous connaissez le problème – Colleen

0

Il n'y a pas de comportement spécial lors de la décrémentation dans la clause except. Est-ce parce que la même exception continue à être levée, donc elle continue de décrémenter? Je remarque que vous ne l'imprimez que lorsque vous obtenez le même code d'erreur, avez-vous des impressions pour "Fehlercode: errorcode"?

+0

Salut, merci pour vos réponses, l'exception est levée 7 sur 105 fois, je ne comprends tout simplement pas pourquoi la valeur est en provenance de query2 seulement, puis mettre l'essai/sauf juste autour de query2 et déplacer l'incrément en dehors de l'essai. ne change plus après la première exception, je n'ai pas d'impression pour le code d'erreur "Fehlercode:" – Mirko

Questions connexes