Pythonベース-異常
例外オブジェクト
Pythonでエラーが発生すると、異常が発生します.
Pythonでは異常オブジェクトを用いて異常を表す.
例外オブジェクトが処理またはスナップされていない場合、プログラムはいわゆるトレースバックで実行を終了します.
次に例を示します.
実行後のエラー:
例外には異なるタイプがあり、Exceptionはベースクラスであり、以下に各シードクラスがあります.
Exceptionを継承することで、独自のクラスを実現することもできます.
例外スナップ
異常はキャプチャできますtryを使用する必要があります...except...文:
ここではパラメータがスナップされているので、遡及しません.
ただし、他の例外の場合:
ここのExceptionはキャプチャされていないので、遡ります.
例外が発生しない場合は、続行しますが、ここではelse文を使用して、例外がない場合に実行できる文を実行し、論理全体をスムーズにすることができます.
結果は次のとおりです.
ただし、スナップできない例外が発生しても、finally文を使用することができます.
Pythonではtryを使う傾向があります...except...ifの代わりに...else..文.
Pythonでエラーが発生すると、異常が発生します.
Pythonでは異常オブジェクトを用いて異常を表す.
例外オブジェクトが処理またはスナップされていない場合、プログラムはいわゆるトレースバックで実行を終了します.
次に例を示します.
def func1():
raise Exception
if __name__ == "__main__":
func1()
実行後のエラー:
(venv) E:\Codes\python_everything\begining-python\src\08>list8-2.py
Traceback (most recent call last):
File "E:\Codes\python_everything\begining-python\src\08\list8-2.py", line 19, in
func1()
File "E:\Codes\python_everything\begining-python\src\08\list8-2.py", line 15, in func1
raise Exception
Exception
例外には異なるタイプがあり、Exceptionはベースクラスであり、以下に各シードクラスがあります.
+-- Exception
+-- StopIteration
+-- StandardError
| +-- BufferError
| +-- ArithmeticError
| | +-- FloatingPointError
| | +-- OverflowError
| | +-- ZeroDivisionError
| +-- AssertionError
| +-- AttributeError
| +-- EnvironmentError
| | +-- IOError
| | +-- OSError
| | +-- WindowsError (Windows)
| | +-- VMSError (VMS)
| +-- EOFError
| +-- ImportError
| +-- LookupError
| | +-- IndexError
| | +-- KeyError
| +-- MemoryError
| +-- NameError
| | +-- UnboundLocalError
| +-- ReferenceError
| +-- RuntimeError
| | +-- NotImplementedError
| +-- SyntaxError
| | +-- IndentationError
| | +-- TabError
| +-- SystemError
| +-- TypeError
| +-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
Exceptionを継承することで、独自のクラスを実現することもできます.
class SomeError(Exception): pass
def func2():
raise SomeError
if __name__ == "__main__":
func2()
例外スナップ
異常はキャプチャできますtryを使用する必要があります...except...文:
class SomeError(Exception): pass
def func2():
raise SomeError
if __name__ == "__main__":
try:
func2()
except SomeError:
print("Some error happened")
ここではパラメータがスナップされているので、遡及しません.
(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
Some error happened
ただし、他の例外の場合:
def func1():
raise Exception
class SomeError(Exception): pass
def func2():
raise SomeError
if __name__ == "__main__":
try:
func1()
except SomeError:
print("Some error happened")
ここのExceptionはキャプチャされていないので、遡ります.
(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
Traceback (most recent call last):
File "E:\Codes\python_everything\begining-python\src\08\list8-3.py", line 27, in
func1()
File "E:\Codes\python_everything\begining-python\src\08\list8-3.py", line 15, in func1
raise Exception
Exception
例外が発生しない場合は、続行しますが、ここではelse文を使用して、例外がない場合に実行できる文を実行し、論理全体をスムーズにすることができます.
if __name__ == "__main__":
try:
print("No exception")
except SomeError:
print("Some error happened")
else:
print("No error happened")
結果は次のとおりです.
(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
No exception
No error happened
ただし、スナップできない例外が発生しても、finally文を使用することができます.
def func1():
raise Exception
class SomeError(Exception): pass
def func2():
raise SomeError
if __name__ == "__main__":
try:
func1()
except SomeError:
print("Some error happened")
else:
print("No error happened")
finally:
print("Do something")
Pythonではtryを使う傾向があります...except...ifの代わりに...else..文.