生徒の行動に関するレポートをテキスト ファイルに作成する小さなプログラムを作成しました。ただし、レコードが見つからない場合、プログラムで -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()
スローされます。StopIteration
try:
first_row = next(cursor)
except StopIteration:
# no results, nothing to iterate over