I.はじめに
Python でコードを作成すると、エラーが発生することがよくあります。これらのエラーは、構文エラー、実行時エラー、またはその他の理由が原因である可能性があります。Python には、これらのエラーに対処するためのいくつかの組み込みツールとテクニックが用意されており、エラーが発生したときに、より適切に診断して修復できるようになります。
2. よくある例
ここでは、Python エラー処理のサンプル コードと説明をいくつか示します。
1. 構文エラー
SyntaxError は通常 、Python コードで間違った構文を使用した場合に発生します。たとえば、次のコードにはコロンが欠落しているため、構文エラーが発生します。
if x == 5
print("x is equal to 5")
次のエラーが発生します。
File "example.py", line 1
if x == 5
^
SyntaxError: invalid syntax
このエラーを修正するには、「if」ステートメントの最後にコロンを追加するだけです。
if x == 5:
print("x is equal to 5")
2. 名前エラー
コード内で未定義の変数または関数を使用すると、Python は NameError を発生させます。たとえば、次のコードでは、変数 'y' が未定義であるため、NameError が発生します。
x = 10
print(y)
次のエラーが発生します。
Traceback (most recent call last):
File "example.py", line 2, in <module>
print(y)
NameError: name 'y' is not defined
このエラーを修正するには、まず変数 'y' を定義する必要があります。
x = 10
y = 5
print(y)
3.タイプエラー
コード内で互換性のないデータ型を使用すると、Python は TypeError を発生させます。たとえば、次のコードでは、整数を文字列と連結できないため、TypeError が発生します。
x = 10
print("The value of x is " + x)
次のエラーが発生します。
Traceback (most recent call last):
File "example.py", line 2, in <module>
print("The value of x is " + x)
TypeError: can only concatenate str (not "int") to str
このエラーを修正するには、整数を文字列に変換する必要があります。
x = 10
print("The value of x is " + str(x))
4. 値エラー
コード内で無効な値を使用すると、Python は ValueError を発生させます。たとえば、次のコードでは、「int」関数が文字列「abc」を整数に変換できないため、ValueError が発生します。
x = int("abc")
次のエラーが発生します。
Traceback (most recent call last):
File "example.py", line 1, in <module>
x = int("abc")
ValueError: invalid literal for int() with base 10: 'abc'
このエラーを修正するには、文字列を整数に変換する前に確認する必要があります。
x_str = "abc"
if x_str.isdigit():
x = int(x_str)
else:
print("x_str is not a valid integer")
5. ファイルが見つかりませんエラー
存在しないファイル を開こうとすると、Python は FileNotFoundError を発生させます。たとえば、次のコードでは、ファイルが存在しないため FileNotFoundError が発生します (この部分は次の記事で共有します)。
with open("example.txt", "r") as f:
contents = f.read()
次のエラーが発生します。
Traceback (most recent call last):
File "example.py", line 1, in <module>
with open("example.txt", "r") as f:
FileNotFoundError: [Errno 2] No such file or directory: 'example.txt'
このエラーを修正するには、ファイルが存在することを確認する必要があります。
import os.path
filename = "example.txt"
if os.path.exists(filename):
with open(filename, "r") as f:
contents = f.read()
else:
print(f"{filename} does not exist")
6.ゼロディビジョンエラー
別の数値を 0 で除算しよう とすると、Python は ZeroDivisionError を発生させます。たとえば、次のコードでは ZeroDivisionError が発生します。
x = 10 / 0
次のエラーが発生します。
Traceback (most recent call last):
File "example.py", line 1, in <module>
x = 10 / 0
ZeroDivisionError: division by zero
このエラーを修正するには、除数を 0 に設定しないようにする必要があります。
x = 10
y = 2
if y != 0:
z = x / y
print(z)
else:
print("y cannot be 0")
7. 例外を試す
上記のエラーに加えて、Python は他のタイプのエラーを処理するための「try-excel」ステートメントも提供します。「try-excel」ステートメントは、コードの実行を試行し、何か問題が発生した場合に例外をキャッチします。サンプルコードは次のとおりです。
try:
x = int(input("Please enter a number: "))
y = 10 / x
print(y)
except ValueError:
print("Please enter a valid integer.")
except ZeroDivisionError:
print("Cannot divide by zero.")
except Exception as e:
print(f"An error occurred: {e}")
上記のコードでは、まずユーザーが入力した文字列を整数に変換しようとします。ValueError が発生すると、エラー メッセージが出力されます。除数が 0 の場合は、別のエラー メッセージが出力されます。最後に、「例外として e を除く」を使用して他のタイプのエラーを処理し、エラー メッセージを出力します。
8. トレースバック
Python には、詳細なエラー レポートを生成するための「traceback」モジュールも提供されています。「トレースバック」は、エラーの原因をより深く理解し、それらを修正するためのガイドとして役立ちます。サンプルコードは次のとおりです。
import traceback
def divide(x, y):
return x / y
try:
result = divide(10, 0)
except Exception as e:
print(traceback.format_exc())
上記のコードでは、2 つの数値を除算する「divide」関数を定義しました。除数として 0 を指定して「divide」関数を呼び出し、エラーが発生したときに「traceback」モジュールを使用して詳細なエラー レポートを出力しようとします。上記のコードを実行すると、次の出力が生成されます。
Traceback (most recent call last):
File "example.py", line 7, in <module>
result = divide(10, 0)
File "example.py", line 4, in divide
return x / y
ZeroDivisionError: division by zero
上記の出力では、エラーが発生した場所と理由を正確に確認できます。これは、エラーをより深く理解し、修正するのに役立ちます。(個人的には、IoT の開発ではこの方法が使用されることはほとんどないと思います)
9. ロギング
最後に、Python には、エラーやデバッグ情報の記録 に役立つ「ロギング」モジュールも提供されています。「ログ」を使用すると、エラー メッセージ、警告メッセージ、デバッグ メッセージなど、必要なメッセージをログに記録できます。サンプルコードは次のとおりです。
import logging
logging.basicConfig(filename="example.log", level=logging.DEBUG)
def divide(x, y):
try:
result = x / y
except ZeroDivisionError as e:
logging.error("Cannot divide by zero")
raise e
return result
result = divide(10, 0)
上記のコードでは、最初に「basicConfig」メソッドを使用してロガーを構成します。ログ ファイル名とログ レベルを指定します。次に、2 つの数値を除算する「除算」関数を定義します。除数が 0 の場合、「logging.error」メソッドを使用してエラー メッセージを記録します。最後に、メイン関数で「divide」関数を呼び出します。
上記のコードを実行すると、ログ ファイル「example.log」が生成されます。ファイルには次の内容が含まれます。
ERROR:root:Cannot divide by zero
Traceback (most recent call last):
File "example.py", line 14, in <module>
result = divide(10, 0)
File "example.py", line 9, in divide
raise e
ZeroDivisionError: division by zero
上記のログ ファイルでは、発生したエラーとエラー メッセージを確認できます。これは、問題をより適切に追跡して解決するのに役立ちます。(個人的には、IoT の開発ではこの方法が使用されることはほとんどないと思います)
3. 重要なポイント
コンピュータープログラミングでは、文書を読んだり、間違いを見つけたりするなど、英語力が非常に重要です。したがって、最善の方法は英語力を向上させることです。