본문 바로가기

python

11. try~except

728x90
반응형

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())

 

 

 

 

 


728x90
반응형

'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