https://blog.csdn.net/qq_35831906/category_12375510.html?spm=1001.2014.3001.5482
目次
3 try...excel...finally ステートメント
コラムガイド
この記事は、コラム「100 日で Python に達する」に掲載されています。 このコラムは、初心者から上級者までを対象としており、Python プログラミング言語の核となる概念と実践的なスキルを素早く把握し、基本的な構文、データ型をマスターします。 、関数、モジュール、Python のオブジェクト指向プログラミングについて重要な知識を待ってから、実際のプロジェクトの戦闘に深く入り込み、Python を使用して実践的な問題を解決してください。
Pythonの魅力を探ってプログラミングの世界をマスターしましょう!さあ行こう!
コラム購読アドレス: https://blog.csdn.net/qq_35831906/category_12375510.html
Python では、例外とは、プログラムの実行中に発生し、プログラムの正常な続行を妨げるエラーまたは予期しない状態のことです。Python には、さまざまな種類のエラーを表すための一連の組み込み例外クラスが用意されています。プログラム内で例外が発生した場合、これらの例外は例外処理メカニズムを通じて捕捉され、処理されるため、エラー状況を適切に処理できます。
一般的な Python 例外の種類と解決策
Python には、さまざまなエラーや例外条件を表すために使用される組み込みの例外タイプが多数あります。
Exception はすべての組み込み例外の基本クラスであり、Python のすべての例外クラスは Exception クラスを継承します。プログラム内で例外が発生すると、対応する例外オブジェクトがスローされ、これらの例外が処理されない場合、プログラムは実行を終了します。
Python での一般的な例外の種類と解決策:
1.SyntaxError
: 構文エラー。通常、タイプミスやコロンの欠落など、コード内の記述エラーが原因で発生します。解決策: コードを注意深くチェックして、構文が正しいことを確認してください。
2.IndentationError
: インデント エラー。通常はコードのインデントが間違っていることが原因で発生します。解決策: コードのインデントが正しいかどうかを確認し、インデントとしてスペース 4 つを使用することをお勧めします。
3.NameError
: 名前が正しくありません。通常、未定義の変数名または関数名を使用したことが原因で発生します。回避策: 変数名と関数名が正しく定義されているか、使用する前に確認してください。
4.TypeError
: 型エラー。通常、間違ったデータ型を使用することによって発生します。解決策: データ型が一致しているかどうかを確認し、一致していない場合は、型変換を実行するか、正しいデータ型を使用してください。
5.ValueError
: 値エラー。通常は不正な値を使用したことが原因で発生します。解決策: データの値の範囲が正しいかどうかを確認し、正当な値が使用されていることを確認します。
6.ZeroDivisionError
: ゼロ除算エラー。通常、除算演算でのゼロ除算が原因で発生します。解決策: 除数がゼロではないことを確認してください。除数がゼロの場合は例外処理を実行して、プログラムのクラッシュを回避できます。
7.IndexError
: インデックス エラー。通常、シーケンスの範囲を超えるインデックスを使用したことが原因で発生します。解決策: インデックス値がシーケンスの範囲内にあるかどうかを確認し、シーケンスの長さを超えていないことを確認します。
8.KeyError
: キー エラー。通常、存在しないキーを使用したことが原因で発生します。回避策: キーが辞書に存在することを確認します。
in
キーワードを使用してキーが存在するかどうかを確認できます。
9.FileNotFoundError
: ファイルが存在しないエラー。通常は、存在しないファイルを開こうとしたことが原因で発生します。解決策: ファイル パスが正しいかどうかを確認し、ファイルが存在することを確認します。
10.ImportError
: インポート エラー。通常はモジュールまたはパッケージのインポートの問題が原因で発生します。解決策: モジュールまたはパッケージのパスが正しいかどうかを確認し、モジュールが存在することを確認します。
11. IOError (入出力エラー): この例外は、ファイルの入出力に関連する問題が発生した場合にスローされます。
解決策: ファイルのアクセス許可が正しいことを確認し、ファイルの入出力に関連する他の問題がないか確認してください。
12.AttributeError (属性エラー): この例外は、存在しない属性またはメソッドを使用した場合にスローされます。
解決策: プロパティまたはメソッドがオブジェクトに存在すること、またはプロパティにアクセスしたりメソッドを呼び出す前にオブジェクトが適切に初期化されていることを確認してください。
RuntimeError
: 実行時エラー。別の例外タイプに分類できないため、通常は基本クラスとしてスローされます。
例外を処理する一般的な方法は、
try...except
ステートメントを使用することです。try
ブロック内で例外をスローする可能性のあるコードを実行し、例外が発生した場合は、except
そのブロックにジャンプして例外を処理します。例外をキャッチして処理することで、プログラムのクラッシュを回避し、プログラムの堅牢性と耐障害性を高めることができます。
2 つの一般的な例外処理ステートメント
Exception はすべての組み込み例外の基本クラスであり、Python のすべての例外クラスは Exception クラスを継承します。プログラム内で例外が発生すると、対応する例外オブジェクトがスローされ、これらの例外が処理されない場合、プログラムは実行を終了します。例外を解決するには、次のアプローチを取ることができます。
1 回の試行...例外ステートメント
例外をスローする可能性のあるコード ブロック内で try...Except ステートメントを使用して、例外をキャッチして処理します。例外をスローする可能性のあるコードを try ブロックに配置し、例外が発生した場合は、Exception ブロックで例外を処理します。
例 1: 特定の例外タイプをキャッチする
try:
num1 = int(input("请输入一个整数: "))
num2 = int(input("请输入另一个整数: "))
result = num1 / num2
print("结果:", result)
except ValueError:
print("请输入有效的整数值!")
except ZeroDivisionError:
print("除数不能为零!")
上の例では、ユーザーが入力した文字列を整数に変換し、除算を実行しようとしています。ユーザーが有効な整数ではない値を入力すると、ValueError
例外が発生し、適切なエラー メッセージが出力されます。除数がゼロの場合、ZeroDivisionError
例外が発生し、適切なエラー メッセージが出力されます。
例 2: すべての例外をキャッチする
try:
num = int(input("请输入一个整数: "))
result = 10 / num
print("结果:", result)
except Exception as e:
print("发生了异常:", e)
この例では、ユーザーが入力した文字列を整数に変換し、それを除算の約数として使用しようとします。どのようなタイプの例外が発生しても、except Exception
ステートメントは例外をキャッチして処理し、例外オブジェクトを変数に割り当てますe
。次に、例外メッセージを出力します。
例 3: 複数の例外タイプをキャッチする
try:
file = open("nonexistent.txt", "r")
content = file.read()
file.close()
print("文件内容:", content)
except FileNotFoundError:
print("文件不存在!")
except PermissionError:
print("没有文件访问权限!")
except Exception as e:
print("发生了异常:", e)
上の例では、存在しないファイルを開いてその内容を読み取ろうとしています。ファイルが存在しない場合は例外が発生しFileNotFoundError
、ファイルにアクセスするための権限が不十分な場合は例外が発生しますPermissionError
。複数のステートメントを使用してexcept
、さまざまなタイプの例外をキャッチし、対応するエラー メッセージを出力します。他のタイプの例外が発生した場合、その例外はexcept Exception
ステートメントによって捕捉され、例外メッセージが出力されます。
2 try...excel...else ステートメント
例外をキャッチするだけでなく、try...Except ステートメントに else ブロックを追加して、例外がない場合の状況を処理することもできます。
これにより、例外をスローする可能性のあるコード ブロックの実行を試みることができ、例外が発生した場合は、except
ブロック内で例外的なケースを処理し、else
ブロック内で通常の実行ケースを処理できます。
文法構造は次のとおりです。
try:
# 可能引发异常的代码块
except ExceptionType:
# 处理指定类型的异常
else:
# 没有异常时执行的代码块
例 1:
def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("Error: Division by zero!")
else:
print(f"The result of {x} divided by {y} is {result}")
divide(10, 2) # Output: The result of 10 divided by 2 is 5.0
divide(10, 0) # Output: Error: Division by zero!
例2;
try:
num1 = int(input("请输入一个整数: "))
num2 = int(input("请输入另一个整数: "))
result = num1 / num2
except ValueError:
print("请输入有效的整数值!")
except ZeroDivisionError:
print("除数不能为零!")
else:
print("结果:", result)
この例では、ユーザーが入力した 2 つの整数を除算します。ユーザー入力が有効な整数でない場合は
ValueError
例外がスローされ、除数がゼロの場合はZeroDivisionError
例外がスローされます。例外が発生しない場合、else
結果はブロックに出力されます。
except
ブロックかブロックかに関係なくelse
、最大 1 つのブロックが実行されます。例外が発生した場合は、対応するexcept
ブロックが実行され、例外が発生しなかった場合は、else
そのブロックが実行されます。もう 1 つ: try-excel-else ステートメントの例外ブロックはオプションです。try ブロックと else ブロックのみを使用することも、複数の例外ブロックを追加してさまざまな種類の例外をキャッチすることもできます。
3 try...excel...finally ステートメント
Final ブロックは try...Except ステートメントに追加でき、例外が発生したかどうかに関係なく、finally ブロック内のコードが実行されます。これは、発生する可能性のある例外をキャッチして処理し、例外が発生したかどうかに関係なくコード ブロックを実行するために使用されます。
try
ブロックには例外をスローする可能性のあるコードが含まれており、except
ブロックは例外を処理するために使用され、finally
ブロック内のコードは例外が発生するかどうかに関係なく常に実行されます。
以下に、try...except...finally
ステートメントの詳細な説明と例を示します。
try
ブロック: 例外をスローする可能性のあるコードが含まれています。
except
ブロック: 例外をキャッチして処理するために使用されます。try
ブロック内で例外が発生すると、プログラムはtry
ブロックの残りのコードをスキップし、except
ブロック内のコードを実行します。これを使用しexcept
て、その後に特定の例外タイプを使用して、特定のタイプの例外を処理することも、except
例外タイプを指定せずに使用して、すべての例外を処理することもできます。
finally
ブロック: 例外が発生したかどうかに関係なく、含まれているコードは常に実行されます。例外が発生したかどうかに関係なく、finally
例外が発生したときに必要なクリーンアップ作業が確実に実行されるように、ブロック内のコードが実行されます。
try...except...finally
このステートメントの使用法を示す簡単な例を次に示します。
def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("除数不能为零!")
result = None
finally:
print("执行finally块!")
return result
# 调用函数
print(divide(10, 2)) # 输出: 5.0
print(divide(10, 0)) # 输出: 除数不能为零! 执行finally块! None
上の例では、
divide
2 つの引数を受け取りx
、で除算をy
試みる関数を定義しました。ゼロの場合、例外がトリガーされます。ブロック内で除算演算を実行しようとします。例外が発生すると、ブロック内のコードが実行されてエラー メッセージが表示されます。ブロック内のコードは、例外が発生するかどうかに関係なく実行されます。x
y
y
ZeroDivisionError
try
except
finally
注:
finally
ブロック内のコードはオプションであり、省略したり使用しないこともできます。try...except
構造ではtry
ブロックは必須ですが、except
ブロックとfinally
ブロックはオプションです。
4 raise ステートメントを使用して例外をスローします
Python では、raise
ステートメントを使用して手動で例外をスローできます。raise
ステートメントを使用すると、コード内の特定のポイントで積極的に例外を発生させ、必要に応じてエラー処理を行うことができます。
raise
ステートメントの一般的な構文は次のとおりです。
raise [ExceptionType[(args)]]
その中には、ExceptionType
例外のタイプがあり、組み込みの例外タイプ ( など) またはカスタム例外タイプを指定できValueError
ますTypeError
。args
は、例外に関する追加情報を提供するオプションのパラメータです。
raise
ステートメントを使用して例外をスローする例を 次に示します。
def divide(x, y):
if y == 0:
raise ValueError("除数不能为零!")
return x / y
try:
result = divide(10, 0)
print(result)
except ValueError as e:
print("发生异常:", e)
上の例では、と の
divide
2 つのパラメーターを取る関数を定義しました。ゼロの場合、ステートメントを使用して、「除数をゼロにすることはできません!」というエラー メッセージを含む例外をスローします。ブロック内の関数を呼び出し、ブロック内でスローされた例外をキャッチして処理します。x
y
y
raise
ValueError
try
divide
except
出力結果:
发生异常: 除数不能为零!
ステートメントを使用すると
raise
、必要に応じて例外を積極的に発生させ、必要に応じて例外処理を実行できます。これにより、コードの可読性と堅牢性が向上し、エラー処理がより柔軟かつ正確になります。
5 つのカスタム例外タイプ
特定の種類の例外を処理する必要がある場合は、例外クラスをカスタマイズし、必要に応じてその例外をスローできます。
class MyError(Exception):
def __init__(self, message):
self.message = message
try:
raise MyError("自定义异常")
except MyError as e:
print("捕获自定义异常:", e.message)
6 例外連鎖処理
例外を現在の場所で処理できない場合、例外は処理のために上位層の呼び出し関数に渡され、例外チェーンが形成されます。
def func():
try:
result = 10 / 0
except ZeroDivisionError as e:
raise MyError("发生异常:") from e
try:
func()
except MyError as e:
print("捕获异常链:", e)
上記のこれらの方法は、例外の処理と解決、プログラムの安定性と信頼性の確保に役立ちます。ただし、例外処理は合理的に使用する必要があり、try...excel ステートメントの過度の使用を避ける必要があることに注意してください。例外処理は、コードを明確で読みやすい状態に保つために、特定の状況に応じて実行する必要があります。
Python プログラムの例外とデバッグ次: 【Python 100 日堪能】Day18: Python プログラムの例外とデバッグ_一般的なプログラムのデバッグ方法とスキル、デバッグコードと公式コードを分離する方法_LeapMay のブログ - CSDN ブログ