안녕하세요 이승혁입니다.
오늘은 파이썬의 코드 중 예외가 발생했을 때 처리하는 기법 try ~ except문 실습을 진행해 보도록 하겠습니다.
※ 예외 처리하기 ( try ~ except )
프로그램을 작성하다 보면 뜻하지 않은 오류가 발생하는 코드가 있을 수 있습니다.
프로그램이 실행되는 동안 오류가 발생하면 프로그램이 더 이상 진행될 수 없는 상태가 되는데
이를 예외상황이라고 합니다.
프로그램에 예외가 발생하더라도 프로그램을 중단 시키지 않고 예외에 대한 적절한 처리를 해
프로그램을 계속 진행시킬 수 있도록 하는 구문입니다.
- 문법은 다음과 같습니다.
try:
문제가 없을 때 실행할 코드
except:
문제가 생겼을 때 실행할 코드
예제) 나누기 함수
def devide(num1,num2):
return print(num1/num2)
devide(10,0)
위 함수의 경우 ZeroDivisionError가 발생했습니다.
다음과 같은 현상이 일어났을 때, 에러 문구 발생이 아닌, 특정 기능을 할 수 있게 하는 것이 바로
예외처리 try~except 구문 입니다.
def try_devide(num1,num2):
try:
return print(num1/num2)
except:
return print('나누기를 할 수 없습니다.')
try_devide(10,0)
예외 처리를 이용해서 나누는 수가 0인경우 except 문을 실행합니다.
※ 예외 처리하기 2 ( try ~ except ~ else )
어떤 로직을 수행할 때 오류상황이 아닐 경우에만 어떤 작업을 수행하는 코드를 작성해야 할 때가 있습니다.
- 문법은 다음과 같습니다.
try:
실행할 코드
except:
예외처리할 코드 블럭
else:
except 절을 만나지 않았을 경우 실행할 코드 블럭
--> else 문을 사용해 try~except 사이의 코드가 문제가 없다는 것을 확인할 수 있는 장점이 있습니다.
예제) 나누기 함수
def try_devide(num1,num2):
try:
print(num1/num2)
except:
print('오류 발생 : 나누기를 할 수 없습니다.\n')
else:
print('오류 없이 잘 수행되었습니다.\n')
return 0
for i in range(10,-10,-5):
print('10 나누기 %d'%i)
try_devide(10,i)
오류가 발생한 3번째 포문 ( 10 / 0 )은 except 구문의 코드를 수행하고, else로 접근을 하지 않습니다.
그 외의 1,2,4번째 포문은 제대로 수행되었기 때문에 try문 수행 후 else구문으로 접근합니다.
※ 예외 처리하기 3 ( try ~ except ~ finally )
오류 발생 유무와 상관 없이 어떤 코드를 무조건 실행시키기 위해서 사용합니다.
- 문법은 다음과 같습니다.
try:
실행할 코드
except:
예외처리할 코드 블럭
finally:
무조건 실행시키려는 코드
def try_devide(num1,num2):
try:
print(num1/num2)
except:
print('오류 발생 : 나누기를 할 수 없습니다.')
finally:
print('무조건 실행되는 코드입니다.\n')
return 0
for i in range(10,-10,-5):
print('10 나누기 %d'%i)
try_devide(10,i)
※ 예외 처리하기 4 ( try ~ except ~ Exception as e )
코드에서 예외가 발생하면 이에 대한 자세한 내용을 파악하는 것이 중요하다.
파이썬은 발생 가능한 예외에 대해 exception 객체로 미리 정의해 두고 있는데
이에 대한 내용은 다음 링크에서 확인할 수 있습니다.
http://docs.python.org/3/library/exceptions.html
- 문법은 다음과 같습니다.
try:
실행할 코드
except ZeroDivisionError: # 파이썬에서 미리 정의한 예외들 중 하나
예외 처리 시 사용할 코드 블럭
except 정의된 에러:
예외 처리 시 사용할 코드 블럭
def my_divide(num1,num2):
try:
return print(num1/num2)
except ZeroDivisionError: # 파이썬에서 미리 정의한 예외
return '0으로 나눌 수 없습니다.'
except KeyboardInterrupt: # 파이썬에서 미리 정의한 예외
return ('사용자에 의해서 프로그램이 종료됩니다.')
my_divide(10,0)
- 예외로 코드상의 오류를 확인하는 방법
try:
print(param)
except Exception as e:
print(e)
try:
print(param)
except Exception as e:
print(e)
※ 예외 처리하기 5 ( 사용자 정의 예외처리 )
파이썬 입장에서 봤을 때는 오류가 아닌데 프로그래머가 오류라고 일부러 프로그램이
돌지 않도록 오류 메세지를 출력하는 경우에 사용합니다.
예 : 금융권 프로그램에서 금액이 안맞는 프로그램이 있다면 사고로 이어지게 되므로
금액이 맞지 않으면 프로그램을 종료하라고 예외처리를 할 수 있다.
- 문법은 다음과 같습니다
def 함수명 :
실행코드
if 조건:
raise Exception("예외가 발생했습니다") # 여기서 종료
else:
return 변수명
※ 실습 데이터
※ Pandas 설치
예제 )
def find_sal():
import pandas as pd
emp=pd.read_csv("d:\\emp2.csv")
name = input('사원 이름을 입력하세요')
sal=emp[['sal']][emp['ename']==name.upper()].values[0]
if sal>=3000:
raise Exception("해당 사원의 월급을 볼 수 없습니다.")
else:
return sal
print(find_sal())
raise Exception 문법을 통해 지정한 문구의 에러를 확인할 수 있습니다.
※ 사용자 값 입력받기(input)
파이썬 내장 함수 input은 사용자가 키보드로 입력한 값을 문자열로 리턴합니다.
input()의 인자는 사용자 입력을 돕기위한 안내 문구나 힌트 등을 표시하는 문자열이 된다.
- 문법은 다음과 같습니다
k = input('값을 입력하세요~')
print('당신이 입력한 값은<' + k +'입니다.')
k=input('<값>을 입력하세요~')
if k=='':
print('아무것도 입력하지 않았습니다.')
else:
print('당신이 입력한 값은 <'+k+'> 입니다.')
k=input('<값>을 입력하세요~')
if k=='':
print('아무것도 입력하지 않았습니다.')
else:
print('당신이 입력한 값은 <'+k+'> 입니다')
공백도 마찬가지로 하나의 문자로 입력됩니다.
이번 포스팅에서는 예외처리에 대해서 실습을 진행해 보았습니다.
읽어주셔서 감사합니다.
'프로그래밍 > Python' 카테고리의 다른 글
Python-14) 문자열 공백 제거, 길이, 알파벳 확인, : Python strip, Python str, Python install (0) | 2020.12.13 |
---|---|
Python-13) filter, 최대값, 최소값, 문자열 슬라이싱, 조작 : Python install, 파이썬 마스터 (2) | 2020.12.12 |
Python-12) input, type, % , divmod, abs, round ,int ,float (0) | 2020.12.04 |
Python-11) Python - Oracle 연동하기 , python sql, 파이썬 sql (0) | 2020.11.25 |
Python-9) 클래스의 상속, 오버로딩, 오버라이딩 : Python 설치, 클래스, 상속, 객체지향 언어 (2) | 2020.11.23 |
Python-8) Class : Python, Python 설치, 파이썬 클래스, 객체 (0) | 2020.11.17 |
Python-7) Numpy : Python, Python 설치, 파이썬 마스터, 객체지향 언어 (0) | 2020.11.16 |
Python-6) 함수, 모듈, 패키지 : Python, Python 설치, 파이썬 마스터 (0) | 2020.11.11 |