구문 오류(syntax error)
: 프로글매 실행 전에 발생하는 오류
예외(exception)
or런타임 오류(runtime error)
: 프로그램 실행 중에 발생하는 오류
괄호의 개수, 들여쓰기 문제 등으로 인해 프로그램이 실행되기도 전에 발생하는 오류
EOL
: And Of Line
프로그램 실행 중에 발생하는 오류
예외를 해결하는 모든 것.
조건문을 사용하는 방법, 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 구문을 제공.
if 구문을 활용하는 코드에 비해 약간 느릴 수있다.
# 기본 구조
try:
예외가 발 생할 수 있는 코드
except:
예외가 발생했을 때 실행할 코드
# pass 사용
try:
예외가 발 생할 수 있는 코드
except:
pass
# try except else 구문
try:
예외가 발 생할 수 있는 코드
except:
예외가 발생했을 때 실행할 코드
else:
예외가 발생하지 않았을 때 실행할 코드
예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문.
예외 발생 여부와 관계 없이 무조건 실행할 때 사용하는 코드
# 기본 구조
try:
예외가 발 생할 수 있는 코드
except:
예외가 발생했을 때 실행할 코드
else:
예외가 발생하지 않았을 때 실행할 코드
finally:
무조건 실행할 코드
finally
구문과 파일처리close()
함수를 사용하지만, 예외 발생으로 파일이 제대로 닫히지 않는 문제가 발생할 수 있다.finally
구문을 파일 처리에 사용하기도 한다.return
키워드와 finally
구문finally
구문은 무조건 실행된다.break
를 사용할 때도 마찬가지이다.
try
구문은 단독으로 사용할 수 없다.
반드시 except
구문 또는 finally
구문과 함께 사용해야 한다.
else
구문은 반드시 except
구문 뒤에 사용해야 한다.
가능한 조합
try
+ except
구문 조합try
+ except
+ else
구문 조합try
+ except
+ finally
구문 조합try
+ except
+ else
+ finally
구문 조합try
+ finally
구문 조합
예외가 발생하면 예외와 관련된 정보가 생기며, 그 정보들은 예외 객체에 저장된다.
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 예외 객체
# 입력 받기
number = input("정수 입력")
number = int(number)
#조건문 사용
if number > 0:
# 양수일 때: 미구현 상태
raise NotImpementedError
else:
# 음수일 때: 미구현 상태
raise NotImpementedError
윤인성, 『혼자 공부하는 파이썬』, 한빛미디어