파이썬의 에러 핸들링을 위한 예외처리에 대해 공부하고 내용을 정리하려 한다.
파이썬에는 여러 에러 메세지들이 있다. ValueErro
ZeroDivisionError
등등.. 에러가 발생하면 실행은 중단되고, 에러 메세지를 띄운다. 그런다음 에러를 고치고 다시 실행을 시켜주어야한다.
예상되는 에러를 효율적으로 처리하기위해 예외처리를 해야한다.
Javascript에서는 try catch
문을 사용했었지만. 파이썬에서는 try except
문을 사용한다.
try except
기본 형태
try: 내용 except 에러 이름 as err: 에러 핸들링
예상되지 않는 에러에 대해서는
Exception
를 사용하면 된다.try: print("나누기 전용 계산기입니다.") nums = [] nums.append(int(input("첫 번째 숫자를 입력하세요 : "))) nums.append(int(input("두 번째 숫자를 입력하세요 : "))) # nums.append(int(nums[0] / nums[1])) print("{0} / {1} = {2}".format(nums[0], nums[1], nums[2])) except ValueError: print("에러! 잘못된 값을 입력하였습니다.") except ZeroDivisionError as err: print(err) except Exception as err: print("알 수 없는 에러가 발생하였습니다.") print(err)
본인이 예상되는 상황 또한 에러처럼 헨들링이 가능하다.
Exception
객체를 상속받아 클래스로 만들면 된다.
기본 형태class 이름(Exception): def __init(self): def __str__(self):
__str__
메서드를 사용해 원하는 메세지를 출력하게 할 수도 있다.class BigNumberError(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg try: print("한 자리 숫자 나누기 전용 계산기입니다.") num1 = int(input("첫 번째 숫자를 입력하세요 : ")) num2 = int(input("두 번째 숫자를 입력하세요 : ")) if num1 >= 10 or num2 >= 10: raise BigNumberError("입력값 : {0}, {1}".format(num1, num2)) print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2))) except ValueError: print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.") except BigNumberError as err: print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요.") print(err)
finally
코드를 실행하고 난 뒤 실행되는 메서드이다.
프로그램이 종료되면 해당 메서드의 내용이 출력된다.
기본 형태try: 내용 finally: 종료 이후 실행
class BigNumberError(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg try: print("한 자리 숫자 나누기 전용 계산기입니다.") num1 = int(input("첫 번째 숫자를 입력하세요 : ")) num2 = int(input("두 번째 숫자를 입력하세요 : ")) if num1 >= 10 or num2 >= 10: raise BigNumberError("입력값 : {0}, {1}".format(num1, num2)) print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2))) except ValueError: print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.") except BigNumberError as err: print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요.") print(err) finally: print("계산기를 이용해 주셔서 감사합니다.")