혼공파 | 06. 예외 처리

yeonk·2021년 9월 25일
0

python

목록 보기
6/23
post-thumbnail

1. 구문 오류와 예외


구문 오류(syntax error): 프로글매 실행 전에 발생하는 오류
예외(exception) or 런타임 오류(runtime error): 프로그램 실행 중에 발생하는 오류



구문 오류(syntax error)

괄호의 개수, 들여쓰기 문제 등으로 인해 프로그램이 실행되기도 전에 발생하는 오류

EOL: And Of Line






예외(exception)

프로그램 실행 중에 발생하는 오류






2. 예외 처리(exception handling)


예외를 해결하는 모든 것.
조건문을 사용하는 방법, Try 구문을 사용하는 방법이 있다.






기본 예외처리

조건문을 사용하여 예외를 처리하는 경우를 기본 예외 처리라고 한다.

# 숫자를 입력 받는다.
user_input_a = input("정수 입력> ")

# 사용자 입력이 숫자로만 구성되어 있을 때
# input이 정수가 아닌 경우 오류가 발생할 수 있기 때문에 조건문과 isdigit()함수를 사용하여 해결한다.
if user_input_a.isdigit():
	# 숫자로 변환
    number_input_a = int(user_input_a)
    #출력
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
else:
	print("정수를 입력하지 않았습니다.")

🙋‍♀️ 프로그램을 작성할 때는 항상 예외적인 상황까지 모두 생각하는 습관을 기르는 것이 좋다.






Try except 구문

프로그래밍 언어의 구조적인 문제로 인해 조건문만으로 예외를 처리할 수 없는 경우.
예외를 처리할 수 있는 구문인 try except 구문을 제공.
if 구문을 활용하는 코드에 비해 약간 느릴 수있다.

# 기본 구조
try:
	예외가 발 생할 수 있는 코드
except:
	예외가 발생했을 때 실행할 코드


# pass 사용
try:
	예외가 발 생할 수 있는 코드
except:
	pass


# try except else 구문
try:
	예외가 발 생할 수 있는 코드
except:
	예외가 발생했을 때 실행할 코드
else:
	예외가 발생하지 않았을 때 실행할 코드






finally 구문

예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문.
예외 발생 여부와 관계 없이 무조건 실행할 때 사용하는 코드

# 기본 구조
try:
	예외가 발 생할 수 있는 코드
except:
	예외가 발생했을 때 실행할 코드
else:
	예외가 발생하지 않았을 때 실행할 코드
finally:
	무조건 실행할 코드



  • finally 구문과 파일처리
    파일을 닫을 때 close()함수를 사용하지만, 예외 발생으로 파일이 제대로 닫히지 않는 문제가 발생할 수 있다.
    이러한 문제가 발생하는 것을 방지하기위해 finally 구문을 파일 처리에 사용하기도 한다.

  • return키워드와 finally 구문
    try 구문 중간에 return 키워드를 사용하여 탈출하여도 finally 구문은 무조건 실행된다.
    이는 반복문에서 break를 사용할 때도 마찬가지이다.






구문 조합

  • try 구문은 단독으로 사용할 수 없다.
    반드시 except 구문 또는 finally 구문과 함께 사용해야 한다.

  • else 구문은 반드시 except 구문 뒤에 사용해야 한다.

  • 가능한 조합

    • try + except 구문 조합
    • try + except + else 구문 조합
    • try + except + finally 구문 조합
    • try + except + else + finally 구문 조합
    • try + finally 구문 조합






3. 예외 객체(exception object)


예외가 발생하면 예외와 관련된 정보가 생기며, 그 정보들은 예외 객체에 저장된다.

try:
	예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
	예외가 발생했을 때 실행할 구문

Exception: 예외의 어머니✨. 예외의 종류가 모를 때 사용하면 좋다.

미리 예상하지 못한 예외가 발생하는 경우가 있다.
그래서 else 구문처럼 마지막에는 모든 예외의 부모라고 할 수 있는 Exception을 넣어서 프로그램이 멈추지 않게 하는 것이 좋다.


# 변수 선언
list_number = [52, 273, 32, 72, 100]

# try except 구문으로 예외를 처리
try:
	# 숫자를 입력 받습니다.
    number_input = int(input("정수 입력"))
    #리스트의 요소 출력
    print("{}번째 요소: {}".format(number_input, list_number[number_input]))
    
except ValueError as exception:
	# ValueError가 발생하는 경우
    print("정수를 입력해 주세요")
    print("exception:", exception)
    
except IndexError as exception:
	# IndexError가 발생하는 경우
    print("리스트에서 인덱스를 벗어났어요")
    print("exception:", exception)
    
except Exception as exception:
	# 이외의 예외가 발생하는 경우
    print("미리 파악하지 못한 예외가 발생했습니다")
    print(type(exception), exception)






예외 구분하기

파이썬은 except 구문 뒤에 예외의 종류를 입력해서 예외를 구분할 수 있다.

try:
	예외가 발생할 가능성이 있는 구문
except 얘외 종류 A:
	예외A가 발생했을 때 실행할 구문
except 예외 종류 B:
	예외B가 발생했을 때 실행할 구문
except 예외 종류 C:
	예외C가 발생했을 때 실행할 구문






raise 구문

아직 구현하지 않은 부분이거나 그냥 넘어가면 나중에 문제가 발생할 수 있어 강제 종료를 시키고 싶은 경우 raise 구문을 사용할 수 있다.

# 기본 구조
raise 예외 객체

# 입력 받기
number = input("정수 입력")
number = int(number)

#조건문 사용
if number > 0:
	# 양수일 때: 미구현 상태
    raise NotImpementedError
else:
	# 음수일 때: 미구현 상태
    raise NotImpementedError    






reference


윤인성, 『혼자 공부하는 파이썬』, 한빛미디어

0개의 댓글