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()スローされます。StopIteration

try:
    first_row = next(cursor)
except StopIteration:
    # no results, nothing to iterate over
于 2014-03-15T14:46:46.407 に答える