error, exception : 프로그램 실행 중에 발생할 수 있는 오류
# prnit(1) # NameError : 없는 이름의 변수, 함수를 사용하려고 할 때
# n = int('abc') # ValueError: invalid literal for int() with base 10: 'abc' : 데이터형 오류. 문자를 인트형으로 변환할 수 없음
# n = int('123.') # ValueError: invalid literal for int() with base 10: '123.'
# int(): 문자열 -> 정수
# float: 문자열 -> 실수
numbers = [1, 2, 3]
print(numbers[3])
>>IndexError: list index out of range 인덱스 번호가 범위를 벗어남
print('123'+ 456)
>>TypeError: can only concatenate str (not "int") to str : 숫자와 문자 자료형은 더할 수 없다
print(123/0)
>>ZeroDivisionError: division by zero : 0으로 나눌 수 없다
프로그램 실행중 오류가 발생했을 때 해결 방법:
1) 오류가 발생한 코드 위치를 찾아서 오류가 발생하지 않도록 수정
2) 오류가 발생하더라도, 오류를 무시하고 프로그램이 실행될 수 있도록
프로그램을 작성 -> try 구문
try 구문:
try:
실행할 문장들
except 에러종류 [as 별명]:
에러가 발생했을 때 실행할 문장들
[except 다른에러: 코드]
[else:
에러 없이 try 블록 안의 모든 문장이 정상적으로 실행됐을 때
실행할 코드들]
[finally:
에러 발생 여부와 상관 없이 반드시 실행할 문장들]
에러x : try -> else -> finally
에러o : try -> except -> finally
try:
numbers = [1, 2, 3]
for i, v in enumerate(numbers):
print(i, ':', v)
except IndexError:
print('인덱스 에러 발생')
실행 결과
0 : 1
1 : 2
2 : 3
try:
numbers = [1, 2, 3]
for i, v in enumerate(numbers):
print(i, ':', v)
except IndexError:
print('인덱스 에러 발생')
else:
print('try의 모든 내용을 정상적으로 실행')
finally:
print('finally 블록')
실행 결과
0 : 1
1 : 2
2 : 3
try의 모든 내용을 정상적으로 실행
finally 블록
try:
numbers = [1, 2, 3]
for i in range(1, 4):
print(i, ':', numbers[i])
except IndexError:
print('인덱스 에러 발생')
else:
print('try의 모든 내용을 정상적으로 실행')
finally:
print('finally 블록')
실행 결과
1 : 2
2 : 3
인덱스 에러 발생
finally 블록
try:
numbers = [1, 2, 3]
for i in range(1, 4):
print(i, ':', numbers[i])
except ValueError: # 에러 이름이 잘못 됨
print('인덱스 에러 발생')
else:
print('try의 모든 내용을 정상적으로 실행')
finally:
print('finally 블록')
실행 결과
IndexError: list index out of range
1 : 2
2 : 3
finally 블록
try:
numbers = [1, 2, 3]
for i in range(1, 4):
print(i, ':', numbers[i])
except ValueError:
print('값 에러 발생')
except IndexError:
print('인덱스 에러 발생')
else:
print('try의 모든 내용을 정상적으로 실행')
finally:
print('finally 블록')
실행 결과
1 : 2
2 : 3
인덱스 에러 발생
finally 블록
"""
try-except 구문 활용
"""
while True:
try:
n = int(input('정수 입력>>'))
print('n = ', n)
except ValueError:
print('입력값은 정수여야 합니다!')
print('프로그램 정상 종료')
>>
# 사용자 정의 오류를 발생시키는 방법
"""
사용자 정의 오류를 발생시키는 방법
"""
try:
age = int(input('나이를 입력 >>'))
if age < 0:
raise ValueError('나이는 0 이상의 양의 정수여야 합니다.')
print(f'입력한 나이 : {age}')
except ValueError as e:
print(e.args) # .args : 에러의 내용을 볼 수 있다.
def user_input():
"""
사용자에게 1, 2, 3 중 하나의 숫자를 입력하도록 안내.
사용자가 입력한 숫자를 리턴
사용자가 숫자로 변환할 수 없는 문자를 입력하면, 안내문 출력 후 다시 입력 받음.
사용자가 1, 2, 3 이외의 숫자를 입력하면, 안내문 출력 후 다시 입력 받음.
:return: 1, 2, 3 중의 하나를 리턴
"""
while True:
try:
numbers = int(input('1, 2, 3 중 하나의 숫자를 입력 : '))
if numbers>3 or numbers < 1:
raise ValueError
print(f'입력한 숫자 : {numbers}')
return numbers
except ValueError as e:
print('다시 입력하세요.')
x = user_input()
print(f"user_input():{x}")
'Python > Python기초' 카테고리의 다른 글
Python 25_ 객체지향프로그래밍, class (0) | 2019.12.24 |
---|---|
Python 24_직접 Module 만들기, __init__.py, from ~ import ~ 구문 (0) | 2019.12.23 |
Python 22_ 함수의 람다 표현식(lambda expression) (0) | 2019.12.19 |
Python 21_ 함수의 저장 (0) | 2019.12.18 |
Python 20_ 재귀함수(Reculsive Function) (0) | 2019.12.17 |