💾 Backend/Python

Python 예외처리 (try, except, as)

hjinn0813 2024. 6. 18. 14:04
728x90

에러의 종류

1. 코드를 실행하기 전에 발생하는 오류

- 구문 오류(Syntax Error) : Python 문법에 맞지 않아 실행 자체가 되지 않는다.

2. 코드를 실행한 후에 발생하는 오류

- 예외(Exeption) / 런타임 오류(Runtime Error) : 문법에는 문제가 없지만 실행 중에 오류 발생

  • IndexError : 리스트의 인덱스 범위를 넘어갈 때
  • ValueError : 변환할 수 없는 문자나 숫자를 변환할 때
  • NameError : 존재하지 않는 변수를 호출할 때
  • AttributeError : 속성 이름이 잘못됐거나 없는 속성을 불러올 때
  • ZeroDivisionError : 0으로 숫자를 나눌 때
  • FileNotFoundError : 존재하지 않는 파일을 호출할 때

- Traceback 메시지 (역추적메시지) : 예외가 발생했을 때 오류의 위치, 종류, 내용을 명시해주는 것.


예외처리 : try ~ except ~

예외가 발생하면 프로그램이 아예 종료되니까, 예외가 발생하는 부분을 미리 예측하여 처리하는 과정이 필요하다.

- 예외가 발생할 수 있는 문장을 try에 작성.

- 오류 종류를 except에 작성하고, 예외처리 안내 메시지를 except 아래에 작성한다.

'''
~~ 기본구조 ~~
try:
  예외가 발생할 수 있는 문장
except 오류 종류:
  예외를 처리하는 문장
'''

# try~ except~ 예시
try:
  num = int(input('정수 입력: '))
except ValueError:
  print('정수가 아님! 정수를 입력해주세요!')


while True: # 무한 반복
  try:
    num = int(input('정수 입력: '))
    break # 정수 입력시 반복문 탈출
  except ValueError: # 예외 처리
    print('정수가 아님!')

except 절에는 오류의 종류를 명시해야하지만, 경우에 따라서는 생략할 수도 있다.

만약 오류의 종류를 생략하면, 모든 오류에 대해 하나의 except를 실행한다.

# except에서 오류의 종류 생략하기
try:
  x = int(input('정수 입력> '))
  y = int(input('정수 입력> '))
  print(x/y)
except:
  print('0으로 나눌 수 없음!!')

예외처리 : as 키워드

시스템에서 출력하는 기본적인 오류 메시지로 예외를 처리하는 방법.

'''
~~ 기본구조 ~~
try:
  예외 발생할 수 있는 문장
except 발생 오류 as 오류 메세지 변수:
  예외 발생시 실행할 문장
'''

try:
  color = ['purple', 'yellow', 'green', 'blue']
  for x in color:
    print(color.index(x))
  print(color.index('orange'))
except ValueError as message:
  print(message)

'''
예시의 리스트에는 'orange'가 없기 때문에 ValueError가 발생
-> as 키워드로 기본적인 오류 메시지를 출력하도록 설정
-> 'orange' is not in list 출력
'''

다중 예외 처리 : try ~ except ~ else

다수의 오류를 한번에 처리하는 방법.

try에서 경우를 확인하고 조건을 만족하는 except절을 출력한다.

만약 예외가 없으면 else절을 출력한다.

'''
~~ 기본구조 ~~
try:
  예외가 발생할 수 있는 문장
except 오류종류1:
  예외를 처리하는 문장
except 오류종류2:
  예외를 처리하는 문장
else:
  예외가 없는 경우에 실행 (else절은 생략 가능)
'''

# try에서 상황을 확인하고 첫번째 except 출력
try:
  num = [1, 2, 3, 4]
  print('START')
  print(num[3]/0) 
  print(num[100])
  print('END')
except NameError:
  print("존재하지 않는 변수 호출")
except IndexError:
  print("인덱스 에러 발생")
except ZeroDivisionError:
  print("0으로 나눌 수 없음!")

# 예외가 없어서 else절 출력
try:
  num = [1, 2, 3, 4]
  for i in num: 
    print(i)
except NameError:
  print("존재하지 않는 변수 호출")
except IndexError:
  print("인덱스 에러 발생")
except ZeroDivisionError:
  print("0으로 나눌 수 없음!")
else:
  print("예외 없음! 성공적!!")

※ 코드 확인하기 → https://github.com/hjinn0813/python-start

 

GitHub - hjinn0813/python-start: 2024.06 study basic of python

2024.06 study basic of python. Contribute to hjinn0813/python-start development by creating an account on GitHub.

github.com

728x90