0

我编写了一个小程序,它在文本文件中创建关于学生行为的报告。但是,如果没有找到记录,我希望我的程序能够中断 -try- 语句。我该怎么做呢?

我正在用 Python 编写它并使用 sqlite3。

4

1 回答 1

2

您有 3 个选项,没有一个需要try

  1. 对于仅返回单行的结果,请使用cursor.fetchone(); 这将返回该行,或者None如果没有匹配项:

    result_row = cursor.fetchone()
    if result_row:
        # there was a result
    
  2. 对于多行,只需循环游标;如果没有结果,循环不会抛出异常,只是不迭代:

    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')
    
  3. 对于较小的一组预期结果,您可以使用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
于 2014-03-15T14:46:46.407 回答