Pythonの例外の概要

Oct 20, 2016 am 09:30 AM
python

Python は例外オブジェクトを使用して例外を表します。エラーが発生すると、例外がスローされます。例外オブジェクトが処理されない、またはキャッチされない場合、プログラムはいわゆるトレースバック (エラー メッセージ) で実行を終了します:

>>> 1/0

Traceback (most 最新の呼び出し 最後):

File " "、1 行目、

1/0

ZeroDivisionError: 整数除算またはゼロによるモジュロ

raise ステートメント

例外を発生させるには、クラス (Exception のサブクラス) またはインスタンスを使用して raise を呼び出すことができます。パラメータ番号ステートメント。次の例では、組み込み例外クラスを使用しています:

>>> raise Exception    #引发一个没有任何错误信息的普通异常
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
raise Exception
Exception
>>> raise Exception(&#39;hyperdrive overload&#39;)   # 添加了一些异常错误信息
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
raise Exception(&#39;hyperdrive overload&#39;)
Exception: hyperdrive overload
ログイン後にコピー

システムに付属の組み込み例外クラス:

>>> importExceptions

>>> dir(例外)

[' ArithmeticError'、'AssertionError'、'AttributeError'、'BaseException'、'BufferError'、'BytesWarning'、'DeprecationWarning'、'EOFError'、'EnvironmentError'、'Exception'、'FloatingPointError'、'FutureWarning'、'GeneratorExit' , 'IOError '、'ImportError'、'ImportWarning'、'IndentationError'、'IndexError'、'KeyError'、'KeyboardInterrupt'、'LookupError'、'MemoryError'、'NameError'、'NotImplementedError'、'OSError'、' OverflowError'、'PendingDeprecationWarning'、'ReferenceError'、'RuntimeError'、'RuntimeWarning'、'StandardError'、'StopIteration'、'SyntaxError'、'SyntaxWarning'、'SystemError'、'SystemExit'、'TabError'、'TypeError' 、'UnboundLocalError '、'UnicodeDecodeError'、'UnicodeEncodeError'、'UnicodeError'、'UnicodeTranslateError'、'UnicodeWarning'、'UserWarning'、'ValueError'、'Warning'、'WindowsError'、'ZeroDivisionError'、'__doc__'、' __name__'、'__package__']

すごい!一般的に使用される組み込み例外クラスが多数あります。

カスタム例外

組み込み例外クラスはほとんどの状況をカバーしており、多くの要件には十分ですが、独自の例外クラスを作成する必要がある場合もあります。

他の一般的なクラスと同様に、直接的または間接的に Exception クラスから継承するようにしてください。次のようになります:

>>> class someCustomExcetion(Exception):pass

もちろん、このクラスにいくつかのメソッドを追加することもできます。

例外のキャッチ

try/excel を使用して例外のキャッチと処理を実装できます。

ユーザーが 2 つの数値を入力してそれらを除算できるプログラムを作成するとします。 #どうですか?今回はさらにフレンドリーです

ユーザーとの対話中に例外情報をユーザーに見せたくない場合は、デバッグ中に例外を発生させた方がよいでしょう。 「ブロック」メカニズムをオン/オフにするにはどうすればよいですか?

x = input(&#39;Enter the first number: &#39;)
y = input(&#39;Enter the second number: &#39;)
print x/y
#运行并且输入
Enter the first number: 10
Enter the second number: 0
Traceback (most recent call last):
File "I:/Python27/yichang", line 3, in <module>
print x/y
ZeroDivisionError: integer division or modulo by zero
为了捕捉异常并做出一些错误处理,可以这样写:
try:
x = input(&#39;Enter the first number: &#39;)
y = input(&#39;Enter the second number: &#39;)
print x/y
except ZeroDivisionError:
  print "输入的数字不能为0!"
  
#再来运行
>>>
Enter the first number: 10
Enter the second number: 0
ログイン後にコピー

複数のexcel句

上記のプログラムを実行し(2つの数値を入力して割り算を計算する)、上記の内容を入力すると、別の例外が生成されます:

class MuffledCalulator:
muffled = False   #这里默认关闭屏蔽
def calc(self,expr):
try:
return eval(expr)
except ZeroDivisionError:
if self.muffled:
print &#39;Divsion by zero is illagal&#39;
else:
raise
#运行程序:
>>> calculator = MuffledCalulator()
>>> calculator.calc(&#39;10/2&#39;)
5
>>> calculator.clac(&#39;10/0&#39;)
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
calculator.clac(&#39;10/0&#39;)
AttributeError: MuffledCalulator instance has no attribute &#39;clac&#39;   #异常信息被输出了
>>> calculator.muffled = True   #现在打开屏蔽
>>> calculator.calc(&#39;10/0&#39;)
Divsion by zero is illagal
ログイン後にコピー


OK!この状況を処理する例外ハンドラーを追加できます:

try:
x = input(&#39;Enter the first number: &#39;)
y = input(&#39;Enter the second number: &#39;)
print x/y
except ZeroDivisionError:
  print "输入的数字不能为0!"
  
#运行输入:
>>>
Enter the first number: 10
Enter the second number: &#39;hello.word&#39;  #输入非数字
Traceback (most recent call last):
File "I:\Python27\yichang", line 4, in <module>
print x/y
TypeError: unsupported operand type(s) for /: &#39;int&#39; and &#39;str&#39;  #又报出了别的异常信息
ログイン後にコピー

数字を入力してください!

1 つのブロックで複数の例外をキャッチ

もちろん、1 つのブロックを使用して複数の例外をキャッチすることもできます:

try:
x = input(&#39;Enter the first number: &#39;)
y = input(&#39;Enter the second number: &#39;)
print x/y
except ZeroDivisionError:
print "输入的数字不能为0!"
except TypeError:           # 对字符的异常处理
  print "请输入数字!"
  
#再来运行:
>>>
Enter the first number: 10
Enter the second number: &#39;hello,word&#39;
ログイン後にコピー

"

すべての例外をキャッチ

上記 プログラムを実行した後、次の内容を入力すると

どうすればいいでしょうか? 本当にすべての例外をキャッチするためにコードを使用したい場合は、誤って無視してしまうことがあります。 , その後、Except 句内のすべての例外クラスを無視できます:

try:
x = input(&#39;Enter the first number: &#39;)
y = input(&#39;Enter the second number: &#39;)
print x/y
except (ZeroDivisionError,TypeError,NameError):
print "你的数字不对!
ログイン後にコピー

エラーが発生しました!

End

心配しないでください。ユーザーが誤って間違ったものを入力しました。情報、もう一度参加するチャンスを与えてもらえますか? 負けたときに確実に終了するようにループを追加できます:

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Sublime Code Pythonを実行する方法 Sublime Code Pythonを実行する方法 Apr 16, 2025 am 08:48 AM

PythonコードをSublimeテキストで実行するには、最初にPythonプラグインをインストールし、次に.pyファイルを作成してコードを書き込み、Ctrl Bを押してコードを実行する必要があります。コードを実行すると、出力がコンソールに表示されます。

vscodeでコードを書く場所 vscodeでコードを書く場所 Apr 15, 2025 pm 09:54 PM

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

メモ帳でPythonを実行する方法 メモ帳でPythonを実行する方法 Apr 16, 2025 pm 07:33 PM

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。

See all articles