2012-07-12 92 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