2012-07-12 143 views
0

所以我有一個try/except塊設置,這將經歷一個數據庫依賴於一定的條件:替換值不起作用?

try: 
    for searchnumber in itertools.count(0): 
     print searchnumber 
     c.execute("""SELECT words from searchterms where onstate = 1 AND progid = %d;""") % searchnumber 
     searchterms = (c.fetchall()) 
     searchterms = [",".join(x) for x in searchterms] 
     print searchterms 
except: 
    pass 

出於某種原因,它不是迭代上的progid,其實,它不是甚至沒有分配給它的第一個值(0)。爲什麼會這樣?據我所知,%d應該searchnumber

的整數值
+3

我對'c.execute()'表達式之外的'%searchnumber' * *感到困惑。它不應該在括號裏嗎? – kojiro 2012-07-12 03:12:12

+1

我的天啊。我是一個白癡。 – 2012-07-12 03:14:20

+6

這是一個完美的例子,說明爲什麼你**不應該使用**,除非它隱藏了TypeError。 – DSM 2012-07-12 03:14:26

回答

5
  1. 切勿使用except: pass被替換,它隱藏的信息。

  2. 它目前隱藏的信息可能是從該代碼失敗:

    c.execute("""SELECT words from searchterms where onstate = 1 AND progid = %d;""") % searchnumber 
    
7

你可能隱藏着一個TypeError,因爲你試圖使用%運營商的任何物體或價值相當於c.execute("string")。如果你沒有隱藏所有的錯誤,你可能會發現它。您會注意到這是official Python Dos and Don'ts page中的特定反模式。

+1

+1,但我建議編輯你的答案,說_how_異常被隱藏(除了除外) – Argalatyr 2012-07-12 03:26:09

+0

@Argalatyr如此指出。 – kojiro 2012-07-12 21:41:46