2012-11-20 2 views
2

except 절에서 변수를 감소시킬 때 특별한 동작이 있습니까? sid은 예외 조항에 처음 들어갈 때까지 계속 증분을 계속 수행하며 그 다음에 루프는 for 루프의 나머지 기간 동안 동일한 값을 유지합니다. (105 개) 시도 중try-except에서 감소시 Python 불명확 동작

7에는 출력 "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 

해결 다음 쿼리 2가 발생 후에는 최초의 예외 첫 번째 쿼리가 (동일한) IntegrityError를 발생시키는 것입니다. 그리고 콜린이 말한 것처럼 앞뒤로 움직입니다.

답변

1

글쎄, 당신은 excep에서 그것을 감소시키고 있습니다. t 절을 추가 한 다음 시도에서 증가 시키므로 앞뒤로 진행됩니다. 처음 실패하면 계속 실패 할 것입니다.

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

안녕하세요, 예외가 throw 될 때 감소시키지 않으려 고했지만 ID의 틈이 생겼습니다. Execute query2 (테이블 (열)에 고유 인덱스가있을 때) 예외가 throw됩니다. – Mirko

+0

"query2 실행 (테이블 (열)에 고유 인덱스가있는 경우)"이라는 말에 혼란스러워합니다. 그냥 query2에서오고있다, 다음 try/except 그냥 query2 주위에 넣고 시도 밖에서 증가를 이동합니다. – Colleen

0

except 절에서 감소시킬 때 특별한 동작은 없습니다.

동일한 예외가 계속 발생하여 계속 감소하기 때문에 발생합니까? 나는 당신이 동일한 오류 코드를 얻었을 때만 인쇄한다는 것을 알아 차리고, "Fehlercode : errorcode"에 대한 인쇄물을 얻고 있습니까?

+0

안녕하세요, 귀하의 답변 주셔서 감사합니다, 예외는 105 번 밖으로 7 던져 질, 난 왜 그 값을 이해하지 못한다 첫 번째 예외 이후 더 이상 변경되지 않으면 "Fehlercode :"오류 코드에 대한 출력물이 없습니다. – Mirko

관련 문제