1. 오류의 종류
'''
오류의 종류
: 문법 오류
: 에러 코드+에러 메세지가 출력되는 오류
(NameError, IndexError, ZeroDivisionError
FileNotFoundError, TypeError, ValueError )
=> 예외처리(try...except...else...finally 명령) 가능
: 로직 오류 (내가 잘못짰기 때문에 처음부터 잘 찾아봐야 함.)
# 오류 코드랑 오류 메세지 확인
ex1)
print(10/0)
# ZeroDivisionError: division by zero
ex2)
data_list = [1,2,3]
print(data_list[0], data_list[100])
#IndexError: list index out of range
ex3)
print(apple)
#NameError: name 'apple' is not defined. Did you mean: 'tuple'?
ex4)
a, b = 10, '백'
print(a-b)
#TypeError: unsupported operand type(s) for -: 'int' and 'str'
ex5)
x = '100gifjdh '
print(int(x)+100)
# ValueError: invalid literal for int() with base 10: '100gifjdh '
'''
2. 예외처리의 종류
'''
# 예외처리(Exception)
1) try...except 명령
try :
명령어 (에러 가능)
except 에러코드 as e:
특정 에러코드가 났을때 처리 명령어
e 는 에러메세지 변수 / 굳이 안써도됨
except Exception as e:
모든 에러코드가 있을 때 처리 명령
정상 명령어
2) try...except.else 명령
try :
명령어 (에러 가능)
except 에러코드 as e:
특정 에러코드가 났을때 처리 명령어
e 는 에러메세지 변수
except Exception as e:
모든 에러코드가 있을 때 처리 명령
else :
정상 명령어 1
정상 명령어 2
3) try..except..else..finally 명령
try :
명령어 (에러 가능)
except 에러코드 as e:
특정 에러코드가 났을때 처리 명령어
e 는 에러메세지 변수
except Exception as e:
모든 에러코드가 있을 때 처리 명령
else :
정상 명령어 1
finally :
정상 명령어 2 - 무조건 수행
(에러 처리 후에도 실행됨)
'''
3. try... except 명령
# try ~ except 에러코드 as e ~
# 조건)
# 에러 코드를 미리 알고 있어야 한다.
# e는 에러 메세지
data_list = [ 1, 2, 3]
x, y = 100, 'Hello world'
try :
print(x/10)
print(x/0) #ZeroDivisionError
print(data_list[3]) #IndexError: list index out of range
except ZeroDivisionError as e:
print(f' 에러 발생 : {e}')
except IndexError as e:
print(f' 에러 발생 : {e}')
print('예외처리 테스트 종료')
# 결과)
# 10.0
# 에러 발생 : division by zero
# 예외처리 테스트 종료
# try ~ Exception 에러코드 as e ~
# 모든 에러코드 => Exception 으로 받기 때문에 에러코드를 몰라도 된다.
# e는 에러 메세지
data_list = [ 1, 2, 3]
x, y = 100, 'Hello world'
try :
print(x/10)
print(x/0) #ZeroDivisionError
print(data_list[3]) #IndexError: list index out of range
except Exception as e:
print(f' 에러 발생 : {e}')
print('예외처리 테스트 종료!!!')
# 반복문안에 예외처리 구문이 있는 경우
# NumList 에서 숫자 데이터만 추출한 후 절대값함수(abs())를 이용해서
# 양수로 구성된 리스트 생성
numList = [-42, '21', '십오', 39, -66, '구십삼', -38, 15, 18, 63]
resultList = []
for item in numList:
try:
resultList.append(abs(item))
except Exception : #Exception 생략가능
pass # 오류 무시
print(resultList)
결과)
[42, 39, 66, 38, 15, 18, 63]
4. try... except... else ... finally
# try..except..else..finally...
# 함수 내부에 예외처리가 있는 경우
def divide_test( x,y ):
try:
result = x/y
except Exception as e:
print(f'에러 발생 => {e}')
else:
print(f'{x}/{y} = {result}')
finally:
print('divide_test함수가 호출되었습니다....\n')
divide_test( 100,5 )
divide_test( 100,0 )
divide_test( '백', 4 )
# 결과)
# 100/5 = 20.0
# divide_test함수가 호출되었습니다....
# 에러 발생 => division by zero
# divide_test함수가 호출되었습니다....
# 에러 발생 => unsupported operand type(s) for /: 'str' and 'int'
# divide_test함수가 호출되었습니다....
# 예외처리 안에 함수가 있는 경우
try:
divide_test()
except:
pass
# pass 해서 아무것도 안나옴.
# Quiz
입력된 글자가 숫자가 아니라면 에러 메세지 출력, 입력된 글자가 모두 숫자라면
두 수를 더한 후 출력한다.
def add_except():
try:
# 입력 데이터
data1 = float(input('숫자1 입력?....'))
data2 = float(input('숫자2 입력?....'))
except:
print('입력 데이터가 숫자가 아닙니다.')
else:
print(f'{data1}+{data2} = {data1+data2}')
finally:
print('divide_test 함수가 호출되었습니다....\n')
add_except()
add_except()
add_except()
결과)
숫자1 입력?....김
입력 데이터가 숫자가 아닙니다.
divide_test 함수가 호출되었습니다....
숫자1 입력?....100
숫자2 입력?....200
100.0+200.0 = 300.0
divide_test 함수가 호출되었습니다....
숫자1 입력?....50
숫자2 입력?....-20
50.0+-20.0 = 30.0
divide_test 함수가 호출되었습니다....
'
'Python' 카테고리의 다른 글
16. CSV (0) | 2024.10.11 |
---|---|
15. 파일 입출력 (0) | 2024.10.11 |
13. 모듈 사용하기(math 모듈, random 모듈) (4) | 2024.10.08 |
12. 함수( 반환값, 매개변수, 람다함수, filter(), map()) (3) | 2024.10.08 |
11. 함수 (정의, 매개변수, for문에서의 이용) (1) | 2024.10.08 |