Python
Python 개념 및 실습 - 예외
developers developing
2022. 9. 13. 09:00
예외처리, 문법 에러
# NameError : 변수가 정의 되지 않았는데 사용할 때
a, b = 10, 15
print(a, b)
print(a, b, c) # NameError: name 'c' is not defined

#런타임 에러 : 실행 했을 때 나는 에러
# 0으로 나눌 수 없음
print(10 / 0) # ZeroDivisionError: division by zero

# index 없음
x = [10, 20, 30]
print(x[3])

# key 값 없음
dict1 = {"name": "hong", "age": 25, "city": "seoul"}
print(dict1["addr"])

# value 값 없음
x = [10, 20, 30]
x.index(40)

# 파일 없음
f = open("data/111.txt", "r")

# 타입에러
x = [1, 2]
y = (1, 2)
print(x + y)

파이썬은 인터프리터 언어이기 때문에 순차적으로 실행.
한줄 실행하고 결과, 한줄 실행하고 결과.
# 예외 처리 기법
- try ~ except 문 : 오류 종류와 상관없이 오류가 발생하기만 하면 except 블록 수행
- try ~ except 발생오류 : except에 정해 놓은 오류 시 except 블록 수행
- try ~ except ~ else
- try ~ finally: 오류 발생 여부와 상관없이 무조건 실행(리소스 해제)
- try 단독으로는 올 수 없음
try: # 예외 발생 구문
pass
except: # 예외가 발생한 경우
pass
else: # 예외가 발생하지 않은 경우에 실행(except 절 바로 다음에 위치해야 함)
pass
finally: # 예외가 발생 여부 상관없이 무조건 실행
pass
# try ~ except
name = ["Kim", "Park", "Choi"]
try:
z = "let"
x = name.index(z)
print("{} Found it! in name {}".format(z, x + 1))
except:
print("Not found")

try:
number = int(input("정수입력 >>"))
print("원 반지름 : ", number)
print("원 둘레 : ", 2 * 3.14 * number)
print("원 넓이 : ", 3.14 * number * number)
except:
print("입력 숫자를 확인해 주세요")


# try ~ except 발생오류
name = ["Kim", "Park", "Choi"]
try:
z = "let"
x = name.index(z)
print("{} Found it! in name {}".format(z, x + 1))
except ValueError:
print("Not found")

try:
number = int(input("정수입력 >>"))
print("원 반지름 : ", number)
print("원 둘레 : ", 2 * 3.14 * number)
print("원 넓이 : ", 3.14 * number * number)
except ValueError:
print("입력 숫자를 확인해 주세요")

# try ~ except ~ else
name = ["Kim", "Park", "Choi"]
try:
z = "Kim"
x = name.index(z)
print("{} Found it! in name {}".format(z, x + 1))
except ValueError:
print("Not found")
else:
print("OK! Else")

try:
number = int(input("정수입력 >>"))
except ValueError:
print("입력 숫자를 확인해 주세요")
else:
print("원 반지름 : ", number)
print("원 둘레 : ", 2 * 3.14 * number)
print("원 넓이 : ", 3.14 * number * number)

name = ["Kim", "Park", "Choi"]
try:
z = "let"
x = name.index(z)
print("{} Found it! in name {}".format(z, x + 1))
except Exception: #Exception: 어떤 오류가 나는지 모를 때
print("Not found")


# exception 발생오류 as오류 메세지 변수
try:
4 / 0
except ZeroDivisionError as e:
print(e)

# try ~ finally
try:
f = open("data/info.txt", "r")
finally:
f.close() #오류가 나든 안나든 닫기