2012-11-20 30 views
2

遞減except子句中的變量時是否有任何特殊行爲? sid會一直增加,直到第一次進入異常子句爲止,然後它在for循環的其餘持續時間內保持相同的值。python不明確的行爲,在嘗試中遞減時除外

7了105次嘗試拋出一個異常

沒有打印 「Fehlercode:」 錯誤代碼

這裏是我的代碼:

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 

解決:在QUERY2拋出後,它的第一個例外第一個查詢也造成了(同一個)IntegrityError,然後它就像Colleen所說的那樣來回移動

回答

1

那麼你會在excep中減少它t條款,然後在try中增加它,所以它只是來回走動....如果第一次失敗,它將繼續失敗。

例如

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 
.... 

如果你想跳過失敗的ID,不遞減它。

+0

嗨,我試圖只是不會遞減,當異常被拋出,但後來我在ID的差距。當執行query2(表(列)有一個唯一索引)時拋出異常 – Mirko

+0

我很困惑你的意思是「什麼時候執行query2(表(列)有一個唯一索引」) - 如果你知道問題只是來自query2,然後把try /除了在query2之外,並且將增量移到try之外。 – Colleen

0

在except子句中遞減時沒有任何特殊行爲。

是否因爲相同的異常不斷拋出,所以它不斷遞減?我注意到當你得到相同的錯誤代碼時,你只是將它打印出來,你有沒有得到「Fehlercode:errorcode」的打印輸出?

+0

嗨,謝謝你的回答,異常會被拋出105次中的7次,我只是不明白爲什麼值在第一個異常之後不再改變,我沒有打印出「Fehlercode:」errorcode – Mirko