ホームページ >バックエンド開発 >Python チュートリアル >Pythonの例外の概要
Python は例外オブジェクトを使用して例外を表します。エラーが発生すると、例外がスローされます。例外オブジェクトが処理されない、またはキャッチされない場合、プログラムはいわゆるトレースバック (エラー メッセージ) で実行を終了します:
>>> 1/0
Traceback (most 最新の呼び出し 最後):
File "
>>> raise Exception #引发一个没有任何错误信息的普通异常 Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> raise Exception Exception >>> raise Exception('hyperdrive overload') # 添加了一些异常错误信息 Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> raise Exception('hyperdrive overload') 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('Enter the first number: ') y = input('Enter the second number: ') 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('Enter the first number: ') y = input('Enter the second number: ') 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 'Divsion by zero is illagal' else: raise #运行程序: >>> calculator = MuffledCalulator() >>> calculator.calc('10/2') 5 >>> calculator.clac('10/0') Traceback (most recent call last): File "<pyshell#30>", line 1, in <module> calculator.clac('10/0') AttributeError: MuffledCalulator instance has no attribute 'clac' #异常信息被输出了 >>> calculator.muffled = True #现在打开屏蔽 >>> calculator.calc('10/0') Divsion by zero is illagal
OK!この状況を処理する例外ハンドラーを追加できます:
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except ZeroDivisionError: print "输入的数字不能为0!" #运行输入: >>> Enter the first number: 10 Enter the second number: 'hello.word' #输入非数字 Traceback (most recent call last): File "I:\Python27\yichang", line 4, in <module> print x/y TypeError: unsupported operand type(s) for /: 'int' and 'str' #又报出了别的异常信息数字を入力してください! 1 つのブロックで複数の例外をキャッチ もちろん、1 つのブロックを使用して複数の例外をキャッチすることもできます:
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except ZeroDivisionError: print "输入的数字不能为0!" except TypeError: # 对字符的异常处理 print "请输入数字!" #再来运行: >>> Enter the first number: 10 Enter the second number: 'hello,word'"
すべての例外をキャッチ
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except (ZeroDivisionError,TypeError,NameError): print "你的数字不对!エラーが発生しました! End 心配しないでください。ユーザーが誤って間違ったものを入力しました。情報、もう一度参加するチャンスを与えてもらえますか? 負けたときに確実に終了するようにループを追加できます: