我有一個類似下面的函式來從 SQLite3 表中獲取資料。
def remedysql(crop, disease):
try:
conn = sqlite3.connect('plant_protection.db')
mycur = conn.cursor()
sql=f'select remedy from pp_remedy WHERE crop="{crop}" and disease="{disease}"'
#remedy = mycur.execute(sql).fetchone()[0]
mycur.execute(sql)
remedy = mycur.fetchone()[0]
return remedy
except sqlite3.Error as error:
print("Error while connecting to sqlite plantprot DB")
對于“作物”和“疾病”的組合,只會有一個記錄或沒有。上述功能正常作業的時候,我給fetchone()[0],但是當我只給不作業fetchone()沒有[0]。
還請告知如何在NoneType此處處理(無記錄)例外。
uj5u.com熱心網友回復:
從檔案:
fetchone()
獲取查詢結果集的下一行,回傳單個序列,或者
None當沒有更多資料可用時。
回傳值是一個元組,因此remedy將在第一個元素處找到,即fetchone()[0]. 在查詢回傳的情況下,None沒有第 0 個元素,所以程式會給出一個 TypeError。
一種解決方案是使用fetchone()并確保它在訪問索引之前回傳了一行。例如
remedy = mycur.fetchone()
if remedy:
return remedy[0]
else:
return None
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/335274.html
上一篇:嘗試除錯時拋出C 例外
