Python/Syntax
2021. 8. 24. 10:56
예외 처리
예외
- 기본적으로 예외가 발생하면 프로세스가 종료된다.
예외 처리
예외 발생을 감지하고 대처할 수 있다.
try: 실행할 명령 except 예외 as 변수: 오류 처리문 [else: # 없어도 됨 예외가 발생하지 않을 때의 처리]
scores = ["89", "89점"] try: for score in scores: score_int = int(score) print(score_int) except: print("예외가 발생했습니다.") print("작업완료") ''' stdout 89 예외가 발생했습니다. 작업완료 '''
예외 종류
예외 설명 NameError ValueError 값의 형식이 잘못됐을 때 ZeroDivisionError 0으로 나눴을 때 IndexError 인덱싱 가능한 범위를 벗어났을 때 TypeError except
키워드 뒤에 인자를 받지 않으면 모든 예외를 처리한다.예외에 alias를 붙이는 경우
except Exception as e
와 같이 작성한다.str = "89" try: score = int(str) print(score) a = str[5] except Exception as e: print(e) print("작업완료") ''' stdout 89 string index out of range 작업완료 '''
raise
예외를 발생시키는 키워드
def calcsum(n): if n < 0 : raise ValueError("음수는 처리 불가") total = 0 for i in range(n+1): total += i return total try: print(f"~ 10 = {calcsum(10)}") print(f"~ -5 = {calcsum(-5)}") except Exception as e: print("입력값이 잘못되었습니다.") print(e) print(type(e)) ''' stdout ~ 10 = 55 입력값이 잘못되었습니다. 음수는 처리 불가 <class 'ValueError'> '''
자원 정리
finally
예외 발생 여부와 상관없이 항상 실행할 코드를 의미한다.
주로 작업의 마무리 작업(cleanup)을 수행할 때 사용한다.
from random import choice def connect(): try: print("네트워크 접속") a = 2 / choice((0, 2)) print("네트워크 통신 수행") except Exception as e: print(f"에러 : {e}") finally: print("접속 해제") print("작업 완료\n") connect() connect() connect() ''' stdout 네트워크 접속 에러 : division by zero 접속 해제 작업 완료 네트워크 접속 네트워크 통신 수행 접속 해제 작업 완료 네트워크 접속 네트워크 통신 수행 접속 해제 작업 완료 '''
assert
(단정문)조건이 True이면 통과, False이면 메시지를 가지는 예외를 발생시킨다.
주로 테스트할 때 사용한다.
score = 128 assert score <= 100, "점수는 100 이하여야 합니다." # if score > 100: # raise AssertionError("점수는 100 이하여야 합니다.") print(score) ''' stdout Traceback (most recent call last): File "파일명", line 3, in <module> assert score <= 100, "점수는 100 이하여야 합니다." AssertionError: 점수는 100 이하여야 합니다. '''
'Python > Syntax' 카테고리의 다른 글
파이썬 모듈과 패키지 (0) | 2021.08.24 |
---|---|
파이썬 파일 (0) | 2021.08.24 |
파이썬 표준 모듈 (0) | 2021.08.24 |
파이썬 컬렉션 관리 (0) | 2021.08.24 |
파이썬 집합(Set) (0) | 2021.08.22 |