我编写了一个小程序,它在文本文件中创建关于学生行为的报告。但是,如果没有找到记录,我希望我的程序能够中断 -try- 语句。我该怎么做呢?
我正在用 Python 编写它并使用 sqlite3。
我编写了一个小程序,它在文本文件中创建关于学生行为的报告。但是,如果没有找到记录,我希望我的程序能够中断 -try- 语句。我该怎么做呢?
我正在用 Python 编写它并使用 sqlite3。
您有 3 个选项,没有一个需要try
:
对于仅返回单行的结果,请使用cursor.fetchone()
; 这将返回该行,或者None
如果没有匹配项:
result_row = cursor.fetchone()
if result_row:
# there was a result
对于多行,只需循环游标;如果没有结果,循环不会抛出异常,只是不迭代:
for row in cursor:
# do something with `row`
# nothing will happen if there were 0 results
如果你想检测是否有 0 个结果,你可以设置一个标志变量:
has_results = False
for row in cursor:
has_results = True
# do something with `row`
if not has_results:
raise ValueError('No results for that query')
对于较小的一组预期结果,您可以使用cursor.fetchall()
; 如果没有结果,这将返回一个空列表:
rows = cursor.fetchall()
for row in rows:
# do something with `row`
# nothing will happen if there were 0 results
不要用它来处理大量的行;只需为此使用选项#2。
如果结果为 0,则此选项确实使您可以选择执行其他操作:
rows = cursor.fetchall()
if not rows:
raise ValueError('No results for that query')
如果必须使用try
,则引发异常。对于选项 #1 和 #3,您需要做的就是索引:
result_row = cursor.fetchone()
try:
result_column = result_row[0]
except TypeError:
# no result, `result_row` was `None`
或者
rows = cursor.fetchall()
try:
first_row = rows[0]
except IndexError:
# no results, `rows` was an empty list
对于选项 #2,如果没有下一个结果,next()
将抛出 a :StopIteration
try:
first_row = next(cursor)
except StopIteration:
# no results, nothing to iterate over