今天,写代码,写到了要用fetchall抓取数据库结果,并且要定位到元组中的特定位置,但是当检索结果为空的时候,会出现闪退,原来是fetchall()返回空结果时,下方的索引啦元素定位啦都没法进行,所以闪退,打算写一个简单的if语句:
row_1 = cursor.fetchall()
if row_1 != None:
print(row_1[3])
else:
print('失败')
结果显示row_1[3]不对,究其原因就是当检索结果为空,fetchall()返回Python控制端一个[]中括号,这个其实是一个空元组,Python认为返回一个空元组不是一个空值(什么也没有),所以row_1 != None不成立,查了查资料,可能是因为fetchall函数其实是fetch+all组成的,all的特性导致其返回结果不同。
参考了大佬资料后,解决办法如下:既然返回是空元组,那就将计就计,用len函数来判断这个元组的长度,如果长度=0,那就不执行接下来的索引取元素操作,如果元组长度!=0,就执行接下来的取元素操作(因为我检索的范围结果只有两种,没结果-空元组和有结果-返回值元素数量固定)。
代码如下
row_1 = cursor.fetchall()
if row_1 != None:
print(row_1[3])
print('此次返回结果不是空元组')
else:
print('此次返回结果时空元组,不执行接下来操作')
参考资料如下: