重置价值不起作用?

Posted

技术标签:

【中文标题】重置价值不起作用?【英文标题】:Replacement value not working? 【发布时间】:2012-07-12 03:08:17 【问题描述】:

所以我设置了一个 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 的整数值

【问题讨论】:

我对@9​​87654322@ outside c.execute() 表达式感到困惑。不应该放在括号里吗? 这是一个完美的例子,说明了为什么你不应该使用裸的 except——它隐藏了 TypeError。 你希望我用什么?这是我所知道的唯一一种异常处理方式 @AndrewAlexander 只捕获你期望得到的异常(unexceptional 异常,你可能会说:D) 不要使用字符串格式为 SQL 提供参数。根据数据库模块使用诸如?%s 之类的占位符,并将元组(searchnumber,) 作为.execute() 中的第二个参数传递。 【参考方案1】:

您可能隐藏了TypeError,因为您尝试在任何与c.execute("string") 等效的对象或值上使用% 运算符。如果你没有用裸的 except 隐藏所有错误,你可能已经抓住了它。您会注意到这是 official Python Dos and Don'ts page 中的特定反模式。

【讨论】:

+1,但我建议编辑您的答案以说明 如何 隐藏异常(仅包含例外)【参考方案2】:

    永远不要使用except: pass,它会隐藏信息。

    它当前隐藏的信息可能是这段代码的失败:

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

【讨论】:

以上是关于重置价值不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

text 硬重置不起作用

结束会话,重置变量不起作用?

重启后Android警报重置不起作用

Google reCaptcha 重置不起作用

Java:重置按钮不起作用

“重置本地群集”后 Connect-ServiceFabricCluster 不起作用