如果mysql没有输出......
if record[0][0]:
将返回错误
IndexError: tuple index out of range
我知道解决此问题的唯一解决方案是:
try:
if record[0][0]:
# Do stuff
except IndexError:
pass
但这看起来像一个非常重的包装脚本
仅查明是否
record[0][0]
没有数据。 (没有价值)
是否有更轻松的东西可以做,比如..
if record[0][0] = ""
更新:
这是我的MYSQL代码:
a = _mysql.escape_string(a)
db=b()
db.query("select * from b where a='" + a + "' limit 1")
result = db.store_result()
record = result.fetch_row()
更新
证明了有效的方法:
if record:
而不是
if record[0]:
或
if record[0][0]:
答案 0 :(得分:2)
在一般情况下,如果要检查列表中是否存在项目,只需检查它是否存在。例外被认为是Pythonic代码。使用另一种构造进行访问检查可能性较差,并且存在性能问题。
但是,如果你真的对别的东西感兴趣......那怎么样?
>>> if record[0]:
... field = record[0][0]
这是有效的,因为空列表([]
)在False
语句中评估为if
。
>>> record = [[]]
>>> if record[0]: # returns an empty list, e.g. []
... field = record[0][0] # is not executed
答案 1 :(得分:1)
更简单的替代方案:
import MySQLdb
conn = MySQLdb.connect(passwd="sekret",db="foo")
cur = conn.cursor()
cur.execute("select * from b where a=%s limit 1", (a,))
for result in cur:
print(result)
请注意更改:
MySQLdb
,而不是基础_mysql*
API 答案 2 :(得分:0)
在Python中,有一种方法可以从字典中获取默认值,但不能从列表中获取默认值。例如。在一个字典中:
x = mydict.get('key')如果没有'key',#x将为None
(您还可以提供不同的默认值作为get()方法的第二个参数)
现在,为列表提供类似的东西会很方便。从列表中获取项目 在某种程度上非常类似于从字典中获取项目,但不完全相同。蟒蛇 做出了一个设计决定,没有类似的列表方法。
当然,你可以很容易地制作自己的。我有时在自己的库中使用一个函数 名为'getitem',返回默认arg;但它只查找列表的一个级别, 因为我觉得多个级别太多的角落情况,它可能值得使用 多个级别的例外。但是,你可以做到一个级别:
def getitem(seq, index, default=None):
"""Get item from a `seq` at `index`, return default if index out of range."""
try : return seq[index]
except IndexError : return default
请注意,有一个问题:你不能假设没有回来意味着没有 item,如果您的列表本身可能包含None值。看起来很明显,但那是件好事 你必须记住。
您可以轻松扩展此功能以接受多个索引并处理多个索引 列表的级别,但是你可能会问:我怎么知道哪个级别有 IndexError?