■ 55. 예외처리 이해하기 ① (try~except)
예외?
"프로그램에서 에러가 발생했을 때, 에러를 핸들링하는 기능"
예제:
분자에 10
분모에 2
def my_divide():
x=input('분자의 숫자를 입력하세요~')
y=input('분모의 숫자를 입력하세요~')
return int(x)/int(y)
print(my_divide() )
만약 분모를 0으로 입력하면?
ZeroDivisionError: division by zero
설명: 보기편한 메세지로 에러화면을 바꾸자 !
홈플러스 계산원분이 고객의 홈플러스 카드가 단마기에서 오류 메시지로 나온다면?
문제203.
위의 코드에 예외처리 코드를 입혀서 분모를 0으로 입력해서
위와 같은 에러가 나오면
"나누기를 할 수 없습니다"
라는 메세지가 출력되게 하시오
def my_divide():
try:
x=input('분자의 숫자를 입력하세요~')
y=input('분모의 숫자를 입력하세요~')
return int(x)/int(y)
except:
return '나누기를 할 수 없습니다'
print(my_divide())
※ 설명:
try:
#문제가 없을 경우 실행할 코드
except:
#문제가 생겼을 경우 실행할 코드
문제204. 이름을 물어보게 하고 이름을 입력하면 해당 사원의 월급이 출력되는
함수를 생성하시오!
(emp.csv 와 pandas 를 이용해서)
print(find_sal())
월급을 알고 싶은 사원명을 입력하시오~ SCOTT
3000
def find_sal():
import pandas as pd
emp=pd.DataFrame.from_csv('d:\\csv\\emp.csv')
name=input('월급을 알고 싶은 사원명을 입력 하세요~')
sal=emp[['sal']][emp['ename']==name.upper()].values[0]
return sal
print(find_sal())
설명:
input 의 name 이 그 아랫줄 name.upper() 와 일치하는
sal 을 뽑으라고 코딩짜준거임
문제205.
위의 코드를 수정해서 사원명을 입력했을 때 없는 사원이름을
입력하면 에러가 나는게 아니라
아래의 메세지가 나오게끔 예외처리하시오!
"해당 사원은 없습니다"
def find_sal():
try:
import pandas as pd
emp=pd.DataFrame.from_csv('d:\\csv\\emp.csv')
name=input('월급을 알고 싶은 사원명을 입력 하세요~')
sal=emp[['sal']][emp['ename']==name.upper()].values[0]
return sal
except:
return '해당사원은 없습니다'
print(find_sal())
||
def find_sal(): # import 위치 위로 빼서 작성
import pandas as pd
emp=pd.DataFrame.from_csv('d:\\csv\\emp.csv')
name=input('월급을 알고 싶은 사원명을 입력 하세요~')
try:
sal=emp[['sal']][emp['ename']==name.upper()].values[0]
return sal
except:
return '해당사원은 없습니다'
print(find_sal())
문제206.
while loop문을 이용해서 이름을 물어봤을 때
아무것도 안넣고 그냥 엔터를 치면 계속 물어보게 하시오.
월급을 알고 싶은 사원명을 입력하세요~
월급을 알고 싶은 사원명을 입력하세요~
월급을 알고 싶은 사원명을 입력하세요~
힌트!
1. 반복해야할 문장이 뭔지 생각한다
2. while 조건:
↑
아무것도 입력 안했을 때의 조건
def find_sal():
import pandas as pd
emp= pd.DataFrame.from_csv('D:\\csv\\emp.csv')
name=input('월급을 알고 싶은 사원명을 입력하시오.')
while name == '':
name=input('월급을 알고 싶은 사원명을 입력하시오.')
try:
sal=emp[['sal']][emp['ename'] == name.upper()].values[0]
return sal
except:
return '해당사원은 없습니다.'
print(find_sal())
문제207.
위의 코드를 수정해서 이름을 물어볼 때
숫자를 입력하면
'숫자는 입력할 수 없습니다' 라는 메세지가 출력되게 하시오
def find_sal():
import pandas as pd
emp= pd.DataFrame.from_csv('D:\\csv\\emp.csv')
name=input('월급을 알고 싶은 사원명을 입력하시오.')
while name == '':
name=input('월급을 알고 싶은 사원명을 입력하시오.')
try:
sal=emp[['sal']][emp['ename'] == name.upper()].values[0]
return sal
except:
try:
a=int(name) # 숫자 쓴거를 a에 담고~
return '숫자는 입력할 수 없습니다.'
except:
return '해당사원은 없습니다'
print(find_sal())
#######################################################
■ 56. 예외처리 이해하기 ②(try~except~else)
예제:
try:
실행할 코드 블럭
except:
예외처리 코드 블럭
else:
except 절을 만나지 않았을 경우 실행하는 코드 블럭
예제:
def find_sal(): # import 위치 위로 빼서 작성
import pandas as pd
emp=pd.DataFrame.from_csv('d:\\csv\\emp.csv')
name=input('월급을 알고 싶은 사원명을 입력 하세요~')
try:
sal=emp[['sal']][emp['ename']==name.upper()].values[0]
except:
return '해당사원은 없습니다'
else:
print('월급추출에 성공했습니다')
return sal
print(find_sal())
근데
def find_sal(): # import 위치 위로 빼서 작성
import pandas as pd
emp=pd.DataFrame.from_csv('d:\\csv\\emp.csv')
name=input('월급을 알고 싶은 사원명을 입력 하세요~')
try:
sal=emp[['sal']][emp['ename']==name.upper()].values[0]
print('월급추출에 성공했습니다')
return sal
except:
return '해당사원은 없습니다'
print(find_sal())
**try 절에 넣어도 똑같이 출력된다.
설명:
try:
sal=emp[['sal']][emp['ename']==name.upper()].values[0]
#반드시 수행이 되어야 하는 중요한 코드를 처리해야 else 이후에
#다른 코드들이 돌고 싶게 하고 싶을 때 사용
except:
else:
석우님 설명코드:
def find_sal():
import pandas as pd
emp=pd.read_csv("C:\\emp.csv")
name=input('월급을 알고 싶은 사원명을 입력하세요 : ')
try:
sal=emp[['sal']][emp['ename'] == name.upper()].values[0]
print(a)
ddddd #try 문에 dddd 라는 오류를 집어넣음
except: #except는 try 문에 오류있으니 무조건 except 로 넘어가버린다
return '해당 사원은 없습니다.' #근데 else를 써주면
else: #else 를 써주면 try문의 오류가 있나 없나 확인가능
print('오류없음') #오류까지 확인하고 try 문의 안정감을 준다
if(sal == 3000):
print('월급 추출에 성공했습니다')
return sal
else:
return sal
print(find_sal())
※ 설명:
try와 except 사이의 코드가 문제가 없다는 것을 확실히 눈으로 확인하고
넘어갈 수 있다는 장점이 있다.
■ 복수개의 except 절 사용하기
"예외처리를 여러개를 나열 할 수 있다"
예제:
아래의 두수를 나누는 코드는 작성하는데
아래의 두가지가 다 실행되게 하시오
분자 숫자를 입력하세요~ 10
분모 숫자를 입력하세요~ 0
0으로 나눌 수 없습니다.
분자 숫자를 입력하세요~ 10
분모 숫자를 입력하세요~ aaa
나눌 수 없습니다.
코드:
def my_devide():
try:
x=input('분자 숫자를 입력하세요~')
y=input('분모 숫자를 입력하세요~')
z=x/y
return z
except ZeroDivisionError:
return('0으로 나눌 수 없습니다')
except:
return('나눌 수 없습니다')
print(my_devide())
**왜 제로값 안나옴
def my_devide():
try:
x=input('분자 숫자를 입력하세요~')
y=input('분모 숫자를 입력하세요~')
z=int(x)/int(y) # int 써야함
return z
except ZeroDivisionError:
return('0으로 나눌 수 없습니다')
except KeyboardInterrupt:
return('사용자에 의해서 프로그램이 종료됩니다')
except:
return('나눌 수 없습니다')
print(my_devide())
분자숫자 입력~ 10
crtl+c <-----------를 누르면 아래의 메세지가 출력
사용자에 의해 프로그램이 종료 됩니다
????????안됨
문제208.
문제131번의 번역할 수 없습니다를 예외처리로 구현하시오
번역할 한글을 입력하세요 ~나는 소년 이다
I am boy
dic = {}
import csv
file = open("d:\\smt_dic.csv","r")
dic_csv = csv.reader(file)
for dic_list in dic_csv:
dic[dic_list[1]] = (dic_list[3], int(dic_list[4]) )
a = []
result = ''
input_kor = input ( '번역할 한글을 입력하세요 ~' )
input_list = input_kor.split(' ')
try:
for i in input_list:
a.append([dic[i][1], dic[i][0]])
a.sort()
for i in a:
result += i[1] + ' '
print(result)
except:
print('번역할 수 없습니다')
■ 57. 예외처리 이해하기 ③(try~except~finally)
예제:
try:
실행할 코드 블럭
except:
예외처리 코드 블럭
finally:
실행할 코드가 성공했던 실패했든 무조건 실행되는 블럭
def find_sal():
import pandas as pd
emp=pd.DataFrame.from_csv('d:\\csv\\emp.csv')
name=input('월급을 알고 싶은 사원명을 입력 하세요~')
try:
sal=emp[['sal']][emp['ename']==name.upper()].values[0]
return sal
except:
return '해당사원은 없습니다'
finally:
print('저는 무조건 실행됩니다') # finally 는 무조건 pirnt 로
print(find_sal())
문제209.
두 숫자를 물어보게해서 두 수를 나누는 함수를 실행할 때
성공하던 실패하던 아래의 메세지가 무조건 출력되게 하시오
분자 숫자를 입력하시오 10
분모 숫자를 입력하시오 2
최재혁이 만든 프로그램 입니다.
5
def aaa():
try:
a=input('분자 숫자를 입력하시오')
b=input('분모 숫자를 입력하시오')
c=int(a)/int(b)
return c
except:
return '잘못된 숫자입니다'
finally:
print('최재혁이 만든 프로그램입니다')
print(aaa())
■ 58. 예외처리 이해하기 ④(try~except Eception as e)
"코드상의 오류를 출력할 때 사용"
try:
print(param)
except Exception as e:
print(e)
에러뜸
name 'param' is not defined
↑
위의 코드가 실패한 이유
문제210.
문제 209번 코드에서 코드상의 오류를 발생시키고
프로그램 실행해보시오
def my_divide():
try:
a=input('분자 숫자를 입력하시오')
b=input('분모 숫자를 입력하시오')
c=int(a)/int(b)
return c
except:
return '나누기를 할 수 없습니다'
finally:
print('최재혁이 만든 프로그램입니다')
print(my_divide())
↓
def my_divide():
try:
a=input('분자 숫자를 입력하시오')
b=input('분모 숫자를 입력하시오')
c=int(a)/int(b)
return k
except Exception as e:
print(e)
return '나누기를 할 수 없습니다'
finally:
print('최재혁이 만든 프로그램입니다')
print(my_divide())
Exception as e 는 에러난걸 뜨게해준다
만약 Exception을 안쓰면 그냥 except 내용이 return된다
■ 59. 사용자 정의 예외 처리
"파이썬 입장에서 봤을때는 오류가 아닌데 프로그래머가 이건 오류이다 라고
일부러 프로그램이 안 돌게 오류 메시지를
출력하게 하는 경우에 사용한다"
금액이 안맞는 프로그램이 있다면 <--- 사고 (코드 오류)
예제:
def 함수명:
실행코드
if 어떤조건:
raise Exeption("예외가 발생 했습니다") # try~exception 을 raise Exeption 으로 처리한거임.
else:
return 변수명
문제211.
이름을 물어보게 하고 이름을 입력하면 해당 사원의 월급이
출력되게 하는 파이썬 코드를 작성하는데
월급이 3000 이상인 사원들은 아래의 메세지가 출력되게 하시오
print(find_sal())
사원 이름을 입력하세요~ king
해당 사원의 월급은 볼 수 없습니다.
def find_sal(): # import 위치 위로 빼서 작성
import pandas as pd
emp=pd.DataFrame.from_csv('d:\\csv\\emp.csv')
name=input('월급을 알고 싶은 사원명을 입력 하세요~')
sal=emp[['sal']][emp['ename']==name.upper()].values[0]
if 3000<=sal:
raise Exeption("예외가 발생했습니다")
else:
return sal
print(find_sal())
'python' 카테고리의 다른 글
13. 이진탐색 (0) | 2019.03.25 |
---|---|
12. %, divmod, max/min (0) | 2019.03.25 |
10. class (0) | 2019.03.25 |
9. from/import (0) | 2019.03.25 |
8. 함수, 지역/번역 변수 (0) | 2019.03.25 |