Python基礎講座の例外処理の方法とは何ですか?

WBOY
リリース: 2023-05-27 21:24:52
転載
1684 人が閲覧しました

Exception

Python では、例外オブジェクト (例外オブジェクト) は、コードの実行中に発生する異常な状況を表すために使用されます。実行中のプログラムが爆発する エラーが発生した場合、例外がスローされます。

例外が正しく処理されない場合、操作は終了します。

製品の開発中に例外が発生し、例外の原因を報告しなかった場合、非常に不快な思いをし、異常な問題を解決するのが困難になることが想像できます。

製品の安定性と柔軟性を向上させるために、Python は開発者がさまざまな例外をキャプチャして処理するように実行します。KeyError 例外クラス などの一般的な内部モジュール エラーは次のとおりです。より一般的なものですが、もちろん他にもたくさんあります。

エラーと例外

簡単に理解すると、Python はコード実行エラーを構文エラー(構文エラー)と例外(例外)#の 2 つのカテゴリに分類します。 ##。

文法エラー

まず第一に、文法エラーの問題があります。文面から、コード解析エラーが間違っていることがわかります。

この種のエラーは初心者によく発生しますが、主な原因は、実行中のコードが Python の構文仕様に準拠していないため、構文エラーが報告され、コードが停止してしまうことです。

エラーの例を以下に示します。

>>> if for not in list(1,2,3,4)
  File "<stdin>", line 1
    if for not in list(1,2,3,4)
       ^
SyntaxError: invalid syntax
ログイン後にコピー
上記のエラー レポートから、それが構文エラーであり、無効な構文であることがわかります。そして、エラーは

for の位置にあると指摘しました。明らかに iffor を併用することはできません。

Exception

Exception は、コードの実行中に検出されるエラーです。事前に検出するのは困難です。コードが非常に標準的な方法で記述されている場合でも、実行例外が発生する可能性があります。状態。

エラーの例を以下に示します。数学的演算において、頻繁に議論される問題は、ゼロによる除算の場合です。ただし、例外が発生するため、0 を除数として使用することはできません。

>>> a = 5 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
ログイン後にコピー
エラー メッセージは明らかに、除数として 0 が正しくないことを示しています。

例外処理

エラーと例外を理解したら、例外を処理する必要があります。構文エラーなどの問題は、練習を重ねることで回避できます。2 番目の例外については、

python は、それを処理するための try-excel ステートメントを提供します。

より明確な説明のために、除数が 0 である上記の状況を例として考えてみましょう。

try-excel ステートメントを追加することで例外をキャプチャして処理します。 # 次に、ターミナルで関数を呼び出してみます:

def division(x, y):
	try:
		return x / y
	except ZeroDivisionError:
		print("0不能作为除数!!!")
ログイン後にコピー
出力:

0 は除数として使用できません。 ! !

入力が間違っており、理論的にはエラーが報告されるはずですが、エラーは報告されず、段落が返されました。

次は、

try-Except

ステートメントがどのように機能するかを説明します。

#例外が発生しない場合は、Except コード ブロックをスキップして Try-Except を終了します。

  1. try-Except のコードの特定の行で問題例外が発生した場合、残りのコード 実行を停止します。発生した例外が、excel で指定したものと一致する場合、例外のコード ブロックが実行されます。例外処理が終了し、アプリケーション全体が実行を継続します。

  2. ##発生した例外が、excelで指定したものと一致しない場合、try文が飛び出て、プログラムは引き続き例外をスローし、コードの実行を終了します
  3. もちろん、私たちが記述するコードにはさまざまな例外が含まれる可能性があるため、すべての例外は例外ステートメント ブロックに記述され、具体的な実装は次のとおりです:
  4. division(x=1, y=0)
    ログイン後にコピー

    If any例外リスト内の例外式がキャプチャされると、

    excel
  5. 処理に入ります。
  6. もちろん、各例外を個別に処理したい場合は、1 つずつ処理することもできます:

    except (RuntimeError, TypeError, NameError):pass
    ログイン後にコピー
今日はここで更新して、明日は縄跳びに行きます。おい、毎日ロールロール、古い北京チキンロール〜 (2022.4.20)

Python の例外タイプは継承できます。ここで知っておく必要があるのは、Exceptions の継承後に例外タイプが指定されているかどうかだけです。前の例外からの情報を取得するため、後続の例外もキャッチされます。例は次のとおりです: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">def passpass(x=1): try: return print(x+x) except (RuntimeError, TypeError, NameError): pass except TypeError: print('参数错误啦~') except NameError: print('名称错误啦~')</pre><div class="contentsignin">ログイン後にコピー</div></div> は出力します:

A
B

C

逆に、Except の順序を逆にすると、A だけが出力されます。例外 B と C は両方とも A を継承しているため、B 例外をキャッチして終了します。

class A(Exception):
	pass
class B(A):
	pass
class C(B):
	pass

for cls in [A, B, C]:
	try:
		raise cls()
	except C:
		print('C')
	except B:
		print('B')
	except A:
		print('A')
ログイン後にコピー

出力はすべてですA:

#A
A
A

すべての例外を 1 つずつ抽出すると非常に面倒になります。例外タイプが例外に設定されていない場合、残りのすべてのキャッチされなかった例外がキャッチされます:

class A(Exception):
	pass
class B(A):
	pass
class C(B):
	pass

for cls in [A, B, C]:
	try:
		raise cls()
	except A:
		print('A')
	except B:
		print('B')
	except C:
		print('C')
ログイン後にコピー

重要な関数: else.

else ステートメントは、追加の操作を実行するために使用されます。たとえば、次のようになります。一部のファイル操作は try コード ブロックで実行され、リソースは else で解放されます。else の構文形式は次のとおりです:

def passpass(x=1):
	try:
		return print(x/x)

	except TypeError:
		print('参数错误啦~')
	except NameError:
		print('名称错误啦~')
	except:
		print('报错啦~自己查')
ログイン後にコピー

もちろん、次のように例外を操作することもできます:
try:
	pass
except:
	pass
else:
	pass
ログイン後にコピー
例外を個別にスローする

通常の状況では、開発者は実行エラーを起こしませんが、設計ロジックには準拠していません。したがって、開発者は積極的に例外をスローする必要があります。 raise ステートメントを使用して例外をスローするには:

def passpass(x=1):
	try:
		return print(x/x)

	except TypeError as error:
		print('参数错误啦~', error)
	except NameError:
		print('名称错误啦~')
	except:
		print('报错啦~自己查')
ログイン後にコピー

カスタマイズされた例外

Python の組み込み例外が開発ニーズを満たせない場合は、例外をカスタマイズできます。

自定义异常类必须要直接或间接继承自Exception类。尽管自定义异常类与其他类具有相同的功能,但为保持简洁,应该仅提高必要的属性。

class Error(Exception):
	"""Base class for exception in this module."""
	pass

class InputError(Error):
	"""Exception raised for errors in the input.

	Attributes:
		expression -- input expression in which the error occurred
		message -- explanation of the winerror

	"""
	def __init__(self, expression, message):
		self.expression = expression
		self.message = message
ログイン後にコピー

finally子句

else在代码正常执行后才会被执行的代码块,但有些情况无论代码块是否出现异常都要执行,则需要用到finally语句:

def passpass(x=1):
	try:
		return print(x/x)

	except TypeError as error:
		print('参数错误啦~', error)
	except NameError:
		print('名称错误啦~')
	except:
		print('报错啦~自己查')
	finally:
		print('运算结束~')
ログイン後にコピー

以上がPython基礎講座の例外処理の方法とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート