Python の構文エラーと例外の処理

PythonBeginner
オンラインで実践に進む

はじめに

Python の構文エラーと例外の実験にようこそ!この実験では、Python コードの構文エラーを識別して修正する方法、およびコードの実行中に発生する可能性のある例外を処理する方法を学びます。

達成目標

  • 構文エラー
  • 例外

構文エラーの理解

Python インタプリタがコードの構造を理解できない場合、構文エラーが発生します。これは、括弧が欠けていたり、インデントが間違っていたりなど、さまざまな問題の原因となる場合があります。

新しい Python インタプリタを開きます。

python3

for ループの末尾にコロンが欠けていることによる構文エラーの例を次に示します。

for i in range(10)
  print(i)

インタプリタは構文エラーを発生させ、エラーが発生した場所を教えてくれます。

File "<stdin>", line 1
    for i in range(10)
                      ^
SyntaxError: invalid syntax

キャレット記号(^)は構文エラーの位置を示し、エラーメッセージは構文が無効であることを伝えています。

この構文エラーを修正するには、for ループの末尾にコロンを追加するだけです。

for i in range(10):
  print(i)

次に、インデントが間違っている例を試してみましょう。

if True:
print("Hello, World!")

この例では、print 文が if 文の下に適切にインデントされていません。この構文エラーを修正するには、print 文を正しくインデントする必要があります。

if True:
  print("Hello, World!")

例外の処理

例外とは、プログラムの実行中に発生するエラーのことです。Python では、try文とexcept文を使って例外を処理することができます。

以下は、ZeroDivisionError例外を処理する方法の例です。

try:
  x = 10 / 0
except ZeroDivisionError:
  print("Cannot divide by zero!")

この例では、tryブロックにはZeroDivisionError例外が発生する可能性のあるコードが含まれています。例外が発生すると、制御はexceptブロックに渡され、エラーメッセージを表示することで例外を処理します。

同じtryブロック内で複数の例外を処理することもできます。複数の例外を持つexcept文を使います。

try:
  x = 10 / 0
  y = int('abc')
except ZeroDivisionError:
  print("Cannot divide by zero!")
except ValueError:
  print("Invalid input!")

この例では、tryブロックにはZeroDivisionErrorまたはValueErrorが発生する可能性のあるコードが含まれています。ZeroDivisionErrorが発生すると、ZeroDivisionErrorを持つexceptブロックがそれを処理します。ValueErrorが発生すると、ValueErrorを持つexceptブロックがそれを処理します。

例外の発生

例外を処理するだけでなく、raise文を使ってコード内で例外を発生させることもできます。

以下は、ValueError例外を発生させる方法の例です。

def validate_age(age):
  if age < 0:
    raise ValueError("Age cannot be negative.")

try:
  validate_age(-1)
except ValueError as e:
  print(e)

この例では、validate_age関数は年齢が負の場合にValueError例外を発生させます。tryブロックは負の年齢でvalidate_age関数を呼び出し、これによりValueError例外が発生します。exceptブロックは例外を処理し、エラーメッセージを表示します。

すべての例外をキャッチする

時には、tryブロックで発生する可能性のあるすべての例外をキャッチしたい場合があります。これは、指定された例外がないexcept文を使って行うことができます。

try:
  x = 10 / 0
  y = int('abc')
except:
  print("An error occurred!")

この例では、tryブロックにはZeroDivisionErrorまたはValueErrorが発生する可能性のあるコードが含まれています。どちらかの例外が発生すると、エラーメッセージを表示するexceptブロックによってキャッチされます。

else 節

try文では、else 節を使って、tryブロックで例外が発生しなかった場合にのみ実行されるコードブロックを指定することができます。

try:
  x = int(input("Enter a number: "))
except ValueError:
  print("Invalid input!")
else:
  print("The number is", x)

この例では、tryブロックには、ユーザーが無効な値を入力した場合にValueErrorが発生する可能性のあるコードが含まれています。例外が発生しない場合、else ブロックが実行され、数字が表示されます。

finally 節

try文では、finally節を使って、例外が発生しようがしまいが必ず実行されるコードブロックを指定することができます。

try:
  x = int(input("Enter a number: "))
except ValueError:
  print("Invalid input!")
finally:
  print("Exiting program.")

この例では、tryブロックには、ユーザーが無効な値を入力した場合にValueErrorが発生する可能性のあるコードが含まれています。例外が発生しようがしまいが、finallyブロックは常に実行され、プログラムが終了します。

まとめ

この実験では、Python コードの構文エラーを識別して修正する方法、および try と except 文を使って例外を処理する方法を学びました。また、raise 文を使ってコード内で例外を発生させる方法、および try 文で else と finally 節を使う方法も学びました。

この実験が役立ち、Python の構文エラーと例外に対処する際に自信を持てるようになってほしいと思います!