[python]例外処理
23594 ワード
try / except
異常処理を行うには、実行するコードを
try
に、異常発生時に処理するコードをexcept
に加えてください.try:
x = int(input("Enter num: "))
y = 10 / x
print(y)
except: # 모든 예외 처리
print("Exception")
特定の例外のみ処理
y = [10, 20, 30]
try:
index, x = map(int, input().split())
print(y[index] / x)
except ZeroDivisionError:
print_error("Cannot be divided by 0")
except IndexError:
print_error("Wrong Index")
例外メッセージの受信
except
からas
の後に変数を指定すると、例外エラーメッセージが表示されます.y = [10, 20, 30]
try:
index, x = map(int, input().split())
print(y[index] / x)
except ZeroDivisionError as e:
print_error("Cannot be divided by 0:", e)
except IndexError as e:
print_error("Wrong Index:", e
複数の例外が発生した場合、最初に発生した例外の処理コードのみが実行されます.(または例外では、上層部の例外から処理を開始するすべての例外出力
すべての例外エラーメッセージを出力する場合は、
except
にException
を指定し、as
の後に変数を追加します.y = [10, 20, 30]
try:
index, x = map(int, input().split())
print(y[index] / x)
except Exception as e: # 모든 예외 출력
print_error("Exception:", e)
Else:異常が発生していない場合にコードを実行
y = [10, 20, 30]
try:
index, x = map(int, input().split())
print(y[index] / x)
except Exception as e: # 모든 예외 출력
print_error("Exception:", e)
else: # try의 코드에서 예외가 발생하지 않았을 때 실행된다
print(y)
finally:コードの実行時に例外を考慮しない
y = [10, 20, 30]
try:
index, x = map(int, input().split())
print(y[index] / x)
except Exception as e: # 모든 예외 출력
print_error("Exception:", e)
else: # try의 코드에서 예외가 발생하지 않았을 때 실행된다
print(y)
finally: # 예외와는 상관없이 항상 실행
print("Done")
raise:異常発生
def add_num(num):
if num < 0:
raise Exception("Num must be greater than 0")
else:
return num + 1
try:
x = int(input())
result = add_num(x)
except Exception as e:
print("Exception: ", e)
else:
print(result)
現在の例外を再起動
def three_multiple():
try:
x = int(input("Enter a multiple of 3: "))
if x % 3 != 0:
raise Exception("It is not a multiple of 3")
print(x)
except Exception as e:
print("three_multiple() Exception", e)
raise # re-raise
try:
three_multiple()
except Exception as e:
print("Script File Exception.", e)
Enter a multiple of 3: 4
three_multiple() Exception It is not a multiple of 3
Script File Exception. It is not a multiple of 3
except
でraise
が使用されている場合、例外は再び発生します.(re-raise)assert
assert
は、指定条件式が偽である場合にAssertionError
の例外を生じ、条件式が真である場合にスキップする.assert
は、デバッグモードでのみ実行されます.Pythonは基本的にデバッグモードです.(__debug__
の値はTrue
)x = int(input("Enter a multiple of 3: "))
assert x % 3 == 0, "It is not a multiple of 3"
print(x)
assert
を実行したくない場合は、実行時に-O
オプションを追加できます.python -O main.py
例外の作成
例外を作成する場合は、
Exception
を継承し、新しいクラスを作成できます.次いで、__init__
メソッドでベースクラスの__init__
メソッドが呼び出され、エラーメッセージが追加される.class bcolors:
HEADER = "\033[95m"
OKBLUE = "\033[94m"
OKCYAN = "\033[96m"
OKGREEN = "\033[92m"
WARNING = "\033[93m"
ERROR = "\033[31m"
FAIL = "\033[91m"
ENDC = "\033[0m"
BOLD = "\033[1m"
UNDERLINE = "\033[4m"
def print_error(error, e=None):
if e:
print(f"{bcolors.ERROR}{error} {e}{bcolors.ERROR}")
else:
print(f"{bcolors.ERROR}{error}{bcolors.ERROR}")
class Calculator:
def __init__(self):
pass
def three_mutiple(self, x):
try:
x = int(input())
if x % 3 != 0:
raise self.__NotThreeMutipleError
print(x)
except Exception as e:
print_error("ThreeMultipleException: ", e)
class __NotThreeMutipleError(Exception): # Exception 상속
def __init__(self):
super().__init__("It is not a mutiple of 3")
calc = Calculator()
calc.three_mutiple(10)
以下は
Exception
万継承、pass
加入、何も実現しない.class NotThreeMultipleError(Exception):
pass
この場合、例外が発生した場合にエラーメッセージを入れればよい.raise NotThreeMultipleError('3의 배수가 아닙니다.')
参考資料
Reference
この問題について([python]例外処理), 我々は、より多くの情報をここで見つけました https://velog.io/@t1won/Python-예외-처리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol