[Python モノのインターネット]Python の基本と文法 -- エラー処理 -- モノのインターネット ホスト コンピューター プログラムを開発するための Python クイック スタート

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. 重要なポイント

        コンピュータープログラミングでは、文書を読んだり、間違いを見つけたりするなど、英語力が非常に重要です。したがって、最善の方法は英語力を向上させることです。

おすすめ

転載: blog.csdn.net/qq_39724355/article/details/130671109