重置价值不起作用?
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 的整数值
【问题讨论】:
我对@987654322@ outsidec.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
【讨论】:
以上是关于重置价值不起作用?的主要内容,如果未能解决你的问题,请参考以下文章