Pythonで例外を処理する方法

Pythonで例外を処理する方法

例外処理とは、プログラムの機能しない部分のエラーメッセージをカスタマイズして表示する機能です。





Webサイトを構築している場合でも、API、モジュール、またはPythonを使用してその他の製品を作成している場合でも、例外を効果的に処理する機能により、エラーの原因を明示的に示すことができます。





ここでは、Pythonで例外を処理する方法を見ていきます。





Pythonでの例外処理のしくみ

例外を発生させると、コードのブロックが失敗するたびにメッセージを表示するようにPythonに指示します。例外処理は、誰かにウェイトを持ち上げるように指示するようなものです。そして、彼らができない場合、彼らはあなたに知らせるべきです。

ただし、Pythonで例外を発生させるには、特定のコードブロックを実行するようにPythonに指示します。そのブロックが失敗した場合、失敗したコードに対して定義された例外を発生させるようにPythonに依頼できます。



Pythonプログラミングでいつ例外を使用する必要がありますか?

ほとんどの場合、例外を使用して標準のPythonエラーをマスクできます。ただし、これを行うとデバッグの問題が発生する可能性があるため、注意を払う必要があります。その結果、最終的なバグの根本的な原因を特定するのが難しい場合があります。

したがって、コードを十分にテストし、それが機能することを確認したら、例外を使用する必要があります。最終的には、コード自体ではなく、ユーザー側から発生する可能性のある潜在的な障害を処理するためにそれらを使用することがベストプラクティスです。





つまり、例外を警告ツールとして使用して、プログラムの使用方法をユーザーに案内できます。

Python例外の処理

Pythonで例外を処理するには、最初にコードを 試してみてください... ブロック。場合によっては、 ついに 必要に応じて、さらにアクションを処理するステートメント。





Python例外のコーディングの概念は、一般的に次のようになります。

try:
'code to be executed'
except:
'error message'

前述のように、 ついに 例外ブロックで。しかし、あなたが内部に書いたコードは ついに 句は独立しており、例外があるかどうかに関係なく実行されます。

本質的には、内部で何が起こっているかに関係なく、継続的に実行したいコードの別のブロックがある場合に便利です。 試してみてください... ブロック。

次に例を示します。

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

上記のコードでは、 再起動してください 例外の有無に関係なく、継続的に実行されます。

NS そうしないと 状態はまた続くことができます それ外 声明:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

'B'を定義して、もう一度試してください。

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

上記の例は、標準化されていない例外です。ただし、組み込みの(定義済みの)例外を標準化されていない例外と組み合わせると、より明示的な例外が発生する可能性があります。

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

上記の例外は、最初に NameError の中に 試す ブロック。次に、標準を印刷します NameError 最初に例外が発生します(「名前」「B」は定義されていません」)。そして、あなたの書面による例外でそれをサポートします(「Bを定義する必要があります」)。

関連:すべてのプログラマーが知っておくべき基本的なプログラミングの原則

電話にはどのくらいのRAMが必要ですか

また、一連の例外を処理する場合は、 試す 多くのブロック それ外 ステートメント。これはあなたの場合はかなり便利です 試す ブロックには多くの例外がある可能性があります。

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

除算が有効な場合はどうなりますか?たとえば、 F = 7/0 上記のコードでは F = 7/5 与える:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

Pythonでのユーザー定義の例外

例外を考え出し、プログラムの後半でそれらを呼び出すこともできます。これにより、例外の具体的な説明を入力し、必要に応じて名前を付けることができます。

それにもかかわらず、すべてのユーザー定義の例外(直接的または間接的)は依然として組み込みから発生します 例外 Pythonのクラス。

以下のサンプルコードは、ベースを参照しています 例外 電話で直接 ランタイムエラー それから:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

ご了承ください 接続エラー この場合、はユーザー定義クラスであり、プログラムで必要なときにいつでも発生させることができます。

関連している: Pythonを使用した正規表現の初心者向けガイド

から直接派生させることにより、ユーザー定義の例外を作成できます。 例外 基本クラス。ただし、以下の例外は、6から5を引くことを防ぎ、基本クラスから例外を直接呼び出します。

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

実際には、別の関数で呼び出すことにより、前に定義した例外を使用できます。たとえば、次のように作成できます。 floatError これは、2つのフロートの追加のみを許可します。

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

これで定義したので FloatError クラス、Pythonは、を使用して2つの非フロートリテラルを追加しようとすると、それを発生させます。 addtwoFloat 関数。

あなたは印刷することができます FloatError 何が起こるかを確認するために、作成したのと同じPythonファイル内のクラス:

print(FloatError)
Output:

FloatError ただし、組み込みのPython例外ではありません。これを確認するには、 FloatError このクラスを作成していない別の新しいPythonファイル:

print(FloatError)
Output: NameError: name 'FloatError' is not defined

あなたは NameError Pythonはそれを標準の例外として認識しないためです。

他のエラークラスを自己定義して、それらがどのように機能するかを確認することもできます。

例外を除いてPythonプログラムをよりユーザーフレンドリーにする

Pythonには多くの標準的な例外があります。しかし、あなたもあなたのものを定義することができます。それでも、プログラムの使いやすさは、さまざまな例外(ユーザー定義、非特定、標準)の処理方法にある程度依存します。

ただし、例外を使用すると、ユーザーがプログラムを操作するときにプログラムがどのように機能するかを指定できます。エラーの原因を明確かつ簡潔に述べることで、ユーザーは自分が間違っていることについて頭を悩ませることもあり、場合によっては正しい方向を示すこともあります。

共有 共有 つぶやき Eメール Pythonコードをデバッグする方法

パス内のすべてのPythonバグを潰すためのノウハウを身に付けてください。

次を読む
関連トピック
  • プログラミング
  • Python
  • コーディングチュートリアル
著者について イディソウオミソラ(94件の記事が公開されました)

Idowuは、スマートな技術と生産性に情熱を注いでいます。暇なときは、コーディングで遊んだり、退屈したときにチェス盤に切り替えたりしますが、たまに日常から離れることも大好きです。人々に現代の技術の道を示すことへの彼の情熱は、彼がもっと書くように動機づけます。

IdowuOmisolaのその他の作品

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください