프로그래밍/Python

Python-10) 예외 처리하기(try ~ except) : Python, Python 설치, 파이썬 마스터

LeeSeunghyuk 2020. 11. 24. 17:18
반응형

안녕하세요 이승혁입니다.

 

오늘은 파이썬의 코드 중 예외가 발생했을 때 처리하는 기법 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

 

Built-in Exceptions — Python 3.9.0 documentation

Built-in Exceptions In Python, all exceptions must be instances of a class that derives from BaseException. In a try statement with an except clause that mentions a particular class, that clause also handles any exception classes derived from that class (b

docs.python.org

 

    - 문법은 다음과 같습니다.

       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 변수명

 

※ 실습 데이터

emp2.csv
0.00MB

 

 

※ Pandas 설치

lsh-story.tistory.com/31

 

Python-11) 오라클 Python 연동하기 : 파이썬 SQL, Python 설치, Python anaconda, cx_Oracle

안녕하세요 이승혁입니다. 이번시간에는 오라클 데이터베이스에서 사용하던 테이블을 파이썬으로 연동하여 사용하는 실습을 진행해 보겠습니다. ※ 오라클 연동하기 위한 모듈 설치 1. 검색창

lsh-story.tistory.com

 

예제 ) 

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+'> 입니다')

 

공백도 마찬가지로 하나의 문자로 입력됩니다.

 

이번 포스팅에서는 예외처리에 대해서 실습을 진행해 보았습니다.

 

읽어주셔서 감사합니다.

반응형