오류의 종류
- 프로그램 실행 전에 발생하는 오류Syntax Error
- 괄호 갯수, 들여쓰기 문제 등등
- 프로그램 실행 중에 발생하는 오류예외, Exception
- 프로그램 실행 중 function 안에서 줄 단위로 발생
정상 종료 = 0
비정상 종료 = -1
# 입력으로 문자를 넣으면 비정상 종료됨!
r = int(input("숫자입력: "))
print('원둘레', r * 3.14* 2)
try except
실행시간에 에러가 발생하여 코드가 중단되는 것을 방지할 때 사용
try:
예외가 발생할 가능성이 있는 코드
except:
예외 발생시 처리해야 하는 코드
프로그램이 비정상종료 되는 것만 막으면 된다면 이곳에 아무것도 입력하지 않고 pass만 입력
try:
r = int(input("숫자입력: ")) #예외 발생 가능성 있는 코드
print('원둘레', r * 3.14* 2)
except: # 예외가 발생하면 이곳으로 코드가 이동하고 / 여기서 예외발생시 처리코드입력
print('숫자로 입력 하세요!!')
try~except만 사용하는 방법
- 발생 오류만 포함한 except문
try:
a = [1,2,3,4]
print('try....')
print(a[5])
except IndexError:
print('except..as')
try~except만 사용하는 방법
- except 발생 오류 as 오류 메시지 변수:
try:
a = [1,2,3,4]
print('try....')
print(a[5])
except IndexError as e: # 발생한 에러의 객체를 e로 받아옴
print('except..as')
print(IndexError) # <class 'IndexError'>
print(e) # list index out of range 에러 메세지 출력
try~except만 사용하는 방법
- try문 안에서 여러 개의 except 구문 사용하기
try:
a = [1,2]
print(a[3])
4/0 # 윗라인에서 예외가 발생했기 때문에 이부분까지는 못왔다.
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except IndexError:
print("인덱싱 할 수 없습니다.")
try~except만 사용하는 방법
- 다음과 같이 ZerroDivisionError와 IndexError를 함께 처리할 수도 있다.
try:
a = [1,2]
print(a[3])
4/0
except (ZeroDivisionError, IndexError) as e:
print(e)
try except else 사용하는 방법
- 제어문과 함께 사용하기
- try except else 구문을 사용할 때는 예외 발생 가능 코드만 try 구문 내부에 넣고
나머지를 모두 else구문으로 빼는 경우가 많다 - try : 예외 발생 가능성 있는 코드 except : 예외 발생시 실행할 코드 else : 예외가 발생하지 않았을 때 실행할 코드
try:
age=int(input('나이를 입력하세요: '))
except:
print('입력이 정확하지 않습니다.')
else:
if age <= 18:
print('미성년자는 출입금지입니다.')
else:
print('환영합니다.')
try except else finally 사용하는 방법
try :
예외 발생 가능성 있는 코드
except :
예외 발생시 실행할 코드
else :
예외가 발생하지 않았을 때 실행할 코드
finally:
예외와 상관없이 무조건 실행되어야 하는 코드
def divide(a,b):
return a/b
try:
c = divide(5, 0)
# c = divide(5, 'stirng')
except ZeroDivisionError:
print('두 번째 인자는 0이여서는 안됩니다.')
except TypeError:
print('모든 인자는 숫자여야 합니다.')
except:
print('음 무슨 에러인지 모름.')
else:
print('Result : {0}.'.format(c))
finally: # 자원 close 할 때 필요함!
print("이부분은 항상 실행됩니다.")
사용자 정의 예외 클래스 사용하기
raise 구문 정의
사용자가 강제로 예외를 일으킬 때 사용하는 구문
def raiseErrorFunc():
raise NameError
try:
raiseErrorFunc()
except:
print('NameError is Catched')
>> NameError is Catched
내장 예외만으로는 한계가 있기 때문에 사용자 정의 예외를 정의할 수 있다.
class NegativeDivisionError(Exception):
def __init__(self, value):
self.value = value
def positiveDivide(a,b):
if(b<0):
raise NegativeDivisionError(b)
return a/b
try:
ret = positiveDivide(10,-3)
print('10/3={0}'.format(ret))
except NegativeDivisionError as e:
print('Error -Second argument of positiveDivide is', e.value)
except ZeroDivisionError as e:
print('Error -',e.args[0])
>> Error -Second argument of positiveDivide is -3
'Python > Python 기초' 카테고리의 다른 글
[Python] 파이썬 모듈 사용하기 (0) | 2022.03.15 |
---|---|
[Python] 상속과 다형성 (0) | 2022.03.15 |
[Python] 클래스 | 정적 메소드, private 멤버 (0) | 2022.03.15 |
[Python] 클래스 정의와 인스턴스 생성 (0) | 2022.03.15 |
[Python] 함수 (0) | 2022.03.12 |
댓글