혼공파 72 ~ 74강
1. 구문 오류와 예외
예외로 부터 프로그램을 지켜내는 개발자가 되어야 한다.
기본적인 예외 패턴들이 있지만, 생각도 못한 곳에서 뒷통수를 많이 맞아봐야 실력이 키워짐.
# 예외(Exception)
# 오류(Error)의 일종
# - Syntax Error(= Compiler Error) : 프로그램 실행 전에 발생하는 오류
# - Runtime Error(= Exception) : 프로그램 실행 중에 발생하는 오류
# 구문오류 (Syntax Error)
print("# 프로그램이 시작되었습니다!")
print("# 구문 오류를 강제로 발생시킵니다!"
# Syntax Error가 발생하면 코드가 한줄도 실행되지 않는다.
# 예외(Exception)
print("# 프로그램이 시작되었습니다!")
리스트[1]
# NameError: name '리스트' is not defined
print(int(input("숫자를 입력해주세요>")))
ValueError: invalid literal for int() with base 10: '10.1'
# 사용자에 의한 예상치 못한 경우가 발생할 때도 예외 처리가 되어 있어야 함
# 예외가 구문오류보다 어려운 이유
2. 기본적인 예외처리 방법
기존에는 예외처리를 아래와 같이 조건문으로 만들어 줬지만,
현대의 프로그래밍은 예외를 처리할 수 있는 구문을 따로 제공한다.
입력 = int(input("정수 입력>"))
print(f"원의 반지름: {입력}")
print(f"원의 둘레: {2 * 3.14 * 입력}")
print(f"원의 넓이: {3.14 * 입력 * 입력}")
# 위의 코드의 경우 사용자 입력에서 정수가 아닌 부동소수를 입력하거나 7cm등의 문자가 입력되면 ValueError가 된다.
# 이런 예외를 처리할 수 있도록 코드를 다시 짜보면 아래와 같다.
입력 = input("정수 입력>")
if 입력.isdigit():
숫자입력 = int(입력)
print(f"원의 반지름: {입력}")
print(f"원의 둘레: {2 * 3.14 * 입력}")
print(f"원의 넓이: {3.14 * 입력 * 입력}")
else:
print("정수를 입력하지 않았습니다.")
3. 예외처리 구문 try except
위의 기본적인 예외처리 방법에서 처럼 간단한 int 함수는 나올 수 있는 예외를 예측하기 쉬우나,
예외를 예측하기 힘든 경우가 더 많다.
try except 구문을 사용하여 위의 코드를 바꿔주면 아래와 같다.
예외가 나오는지 조건을 확인하는 코드를 구현할 필요가 없다.
입력 = input("정수 입력>")
try:
숫자입력 = int(입력)
print(f"원의 반지름: {입력}")
print(f"원의 둘레: {2 * 3.14 * 입력}")
print(f"원의 넓이: {3.14 * 입력 * 입력}")
except:
print("정수를 입력하지 않았습니다.")
try except 구문 + pass 키워드 조합하기
try:
예외가 발생할 가능성이 있는 코드
except:
예외가 발생할 경우 실행할 코드
여기에 실행 시키고 싶은 코드가 없으면 pass 키워드를 사용할 수 있음
# 아래 입력리스트를 숫자로 변환 가능한 것만 출력리스트에 담아서 출력하려고 할 때
입력리스트 = ["52", "273", "32.1", "103", "숫자로 변환 할 수 없는 문자열"]
출력리스트 = []
for 요소 in 입력리스트:
if 요소가 숫자로 변환할 수 있다면?:
출력리스트.append(float(요소))
print(출력리스트) # [52, 273, 32.1, 103]
# 이를 try except 구문을 이용해 쉽게 구현 가능
입력리스트 = ["52", "273", "32.1", "103", "숫자로 변환 할 수 없는 문자열"]
출력리스트 = []
for 요소 in 입력리스트:
try:
출력리스트.append(float(요소))
except:
pass
print(출력리스트) # [52, 273, 32.1, 103]
# 함수로 구현해서 사용해 보면
def isfloat(입력):
try:
float(입력)
return True
except:
return False
for 요소 in 입력리스트:
if isfloat(요소):
출력리스트.append(float(요소))
print(출력리스트) # [52, 273, 32.1, 103]
'Base > Python' 카테고리의 다른 글
23. 객체지향 프로그래밍 (0) | 2023.04.20 |
---|---|
22. 예외 처리의 else finally 구문 / 예외 객체와 예외 구분 / 예외 강제 발생 (0) | 2023.03.25 |
20. 파이썬 설치 및 환경설정 (0) | 2023.03.23 |
19. 하노이의 탑 (재귀함수) (0) | 2023.03.10 |
18. 이터러블/이터레이터/제너레이터 함수와 표현식 / 가독성 / 유지보수성 / 깊이우선탐색트리 알고리즘 구현 / (1) | 2023.03.10 |
댓글