반응형
구문적 오류(Syntax Error)
- 문법 오류에 의하여 기계어 변환 과정에서 발생하는 오류
def do_func:
print("hello")
실행 오류(Runtime Error)
- 프로그램 실행중 발생하여 프로그램이 비정상적으로 종료되는 오류
def do_func(text):
return int(text)
text = "3"
do_func(text)
3
text = "3.0"
do_func(text)
def div(n1,n2):
return n1/n2
div(10,0)
의미적 오류(Semantic Error)
- 문법은 정상이지만 실행의 결과가 원하는 대로 나오지 않는 오류
a = (2)
b = (2,)
a == b
False
def do_func(n1,n2):
return print(n1*n2)
a = do_func(3,4)
print(a)
12
None
7.5 * 0.1 == 0.75
True
6 * 0.1 == 0.6
False
6 * 0.1
0.6000000000000001
round(6*0.1,1) == 0.6
True
예외처리
- 프로그램 개발하면서 예상치 못한 상황 발생시 처리
- 입출력 오류와 같은 상황 발생시 프로그램 종료를 방지하기 위함.
- 개발자가 예외 발생 가능 부분을 어떻게 대응하라고 지정해 줄 수 있다.
try:
code context
except:
code context
n = 100
for i in range(10):
print(n/i)
n = 100
for i in range(10):
try:
print(n/i)
except:
print("에러발생")
에러발생
100.0
50.0
33.333333333333336
25.0
20.0
16.666666666666668
14.285714285714286
12.5
11.11111111111111
- 에러를 지정해서 메시지를 볼수있다.
n = 100
for i in range(10):
try:
print(n/i)
except ZeroDivisionError as e:
print(e)
division by zero
100.0
50.0
33.333333333333336
25.0
20.0
16.666666666666668
14.285714285714286
12.5
11.11111111111111
- IndexError
- 리스트의 인덱스 범위를 넘어갈때 발생
a = [1,2,3]
a[5]
- NameError
- 정의되지 않은 변수를 사용하려 할때
karns
- ValueError
- 변환할수 없는 자료형 변환을 시도 할때
a = "양승천"
int(a)
- TypeError
- 자료형이 맞지 않는 연산을 시도할때
- 호출할수 없는 객체를 함수처럼 호출할때
20 / "양승천"
a = 3
a()
- FileNotFoundError
- 없는 파일을 읽어드리려 할때
open("text.txt")
- AttributeError
- 객체에 없는 속성을 사용하려 할때
class MyClass:
def do_func(self):
self.a = self.a + 2
mc = MyClass()
mc.do_func()
- 리스트 형태의 데이터가 있다.
- 정수형으로 변환해서 새로운 리스트에 담자.
- 정수형으로 변환이 안되는 예외 발생시 "정수형으로 변환되지 않습니다."
라는 출력과 함께 실수로 변경해서 다시 정수형으로 변경하는 코드를 작성해봅시다.
lst = ["3","5","3.","3.0","10"]
num_list = []
for i in lst:
try:
num_list.append(int(i))
except ValueError as e:
print("정수형으로 변환되지 않습니다.")
num_list.append(int(float(i)))
num_list
정수형으로 변환되지 않습니다.
정수형으로 변환되지 않습니다.
[3, 5, 3, 3, 10]
- 여러개의 예외가 발생할수 있거나 어떤 예외가 발생할지 알수 없을때
try:
open("text.txt")
a = 5 / 0
except Exception as e:
print(e)
[Errno 2] No such file or directory: 'text.txt'
- else 문
- 해당 예외가 발생하지 않을 경우 수행할 코드
n = 100
for i in range(10):
try:
result = n/i # 에러발생 여부 있음
except ZeroDivisionError as e:
print(e)
else:
result **= 2
print(result)
division by zero
10000.0
2500.0
1111.1111111111113
625.0
400.0
277.7777777777778
204.08163265306123
156.25
123.45679012345678
- finally 문
- 예외 발생여부와 상관없이 무조건 수행할 코드
for n in range(3):
try:
result = 100/n
except ZeroDivisionError as e:
print(e)
else:
print("정상적으로 연산되었습니다.")
finally:
print("처리완료")
division by zero
처리완료
정상적으로 연산되었습니다.
처리완료
정상적으로 연산되었습니다.
처리완료
- 정리해보자
try: 예외 발생 가능성이 있는 실행 코드 except: 예외 발생시 실행 코드 else: 예외 발생하지 않았을 경우 실행코드 finally: 예외 발생 여부와 상관없이 항상 실행할 코드
- 숫자형태의 문자열을 담은 리스트가 있다.
- 정수형으로 변환해서 새로운 리스트에 담자.
- 정수형으로 변환시 예외가 발생하지 않을 경우 "정상적으로 정수형으로 변경합니다." 출력
- 정수형으로 변환이 안되는 예외 발생시
"정수형으로 변환되지 않습니다. 실수형으로 변환후에 시도하겠습니다." 라는 출력과 함께
실수형으로 변경해서 다시 정수형으로 변경하는 코드를 작성
- 예외 발생여부와 상관없이 "정수형으로 변환 및 저장 완료" 를 출력
정상적으로 정수형으로 변경합니다.
정수형으로 변환 및 저장 완료
정상적으로 정수형으로 변경합니다.
정수형으로 변환 및 저장 완료
정수형으로 변환되지 않습니다. 실수형으로 변환후에 시도하겠습니다.
정수형으로 변환 및 저장 완료
정수형으로 변환되지 않습니다. 실수형으로 변환후에 시도하겠습니다.
정수형으로 변환 및 저장 완료
정상적으로 정수형으로 변경합니다.
정수형으로 변환 및 저장 완료
[3, 5, 3, 3, 10]
- raise 문
- 필요할때 에러를 발생 시키는 코드
- if문과 함께 많이 사용된다.
num = 0
if num == 0:
raise ValueError
- 메세지도 넣을수 있다.
num = 0
if num == 0:
raise ValueError("0으로 나눌수 없어요.")
두개의 정수를 인수로 받아 두수를 나누는 함수를 작성하세요
두번째 인수가 1보다 작을 경우 ValueError 발생시키고 "1이상의 정수만 입력하세요" 라고 출력하세요.
def div(num1,num2):
if num2 < 1:
raise ValueError("1이상의 정수만 입력하세요")
return num1/num2
div(10,-1)
- assert 문
- 조건이 거짓일 경우 오류를 발생 시킴
1.0
반응형
'python' 카테고리의 다른 글
[python]파이썬 - 제너레이터(Generator) (0) | 2023.01.25 |
---|---|
[python]파이썬 - 모듈(Module), 패키지(Package) (0) | 2023.01.24 |
[python]파이썬 - 클래스class2 (0) | 2023.01.24 |
[python]파이썬 - 클래스class (0) | 2023.01.24 |
[python]파이썬 - 함수function2 lambda (0) | 2023.01.24 |
댓글