본문 바로가기
Python/파이썬 기초

에러(error)와 예외(exception) - 파이썬 기초(26)

by 콩돌 2019. 1. 9.
반응형

참고 자료

https://docs.python.org/ko/3/tutorial/errors.html



파이썬 버전 3.7 기준



파이썬에서의 에러(Error)와 예외(Exception)


본 포스팅에서 다루는 내용은 다음과 같다.

에러(error), 예외(exception) 등.


파이썬에서 에러는 크게 문법 에러(SyntaxError) 또는 파싱에러로 불리는 에러와 예외(Exception)으로 구분된다.



문법에러(SyntaxError)

  ○ 파싱에러라고도 알려져 있다.

  ○ 파서는 문제가 되는 줄을 보여주고 문제가 있는 위치를 화살표(^)로 표시하여 준다. 

    ▷ 화살표의 위치는 항상 옳은 것은 아니므로 코드 작성자가 에러가 발생한 줄을 잘 살펴보아야 한다.


  ○ 아래 예제는 문법 에러의 예를 보여준다.

    ▷ while 구문과 if 구문에 콜론(:)이 빠져있어 문법에러가 발생하였다.

    ▷ 에러 알림의 첫 번째 줄에선ㅍ각각의 에러가 발생한 줄인 line 1,2을 알려준다.

    ▷ 둘째 줄에는 에러가 발생한 줄을 보여준다.

    ▷ 셋째 줄에는 줄 안에 에러가 발생한 위치를 파서(^)를 통해 알려준다.

    ▷ 넷째 줄에는 발생한 에러의 이름을 구체적으로 알려준다.


문법에러의 예)

In[20]: while 1<2

     ...:     pass

     ...:

  File "<ipython-input-20-475862fdbc2d>", line 1

    while 1<2

                 ^

SyntaxError: invalid syntax


In[21]: while True:

     ...:     if 1<2

     ...:         pass

     ...:

  File "<ipython-input-21-95333ab7f8b3>", line 2

    if 1<2

          ^

SyntaxError: invalid syntax



예외(Exception)

  ○ 작성한 코드가 문법적으로는 문제가 없더라도, 실행을 하려고 할 때 에러가 발생하는 경우가 있다.

    ▷ 이렇게 실행중에 감지되는 에러를 예외(Exception)이라 칭한다.

  ○ 이러한 예외들은 파이썬이 자체적으로 처리하지 않기 때문에 예외가 발생한 경우에는 프로그램을 정지시킨다.


  ○ 파이썬 자체적으로 내장되어있는 예외는 굉장히 많은데 자세한 내용은 여기를 참고한다.

  ○ 사용자가 자체적으로 예외를 정의를 하는 것이 가능한데 자세한 내용은 여기를 참고한다.


  ○ 아래 예는 대표적으로 세 가지 예외를 보여준다.
    ▷ 발생한 예외의 이름은 알림의 마지막 줄에 나타나있다.

    ▷ 첫 번째 예외는 NameError로 존재하지 않는 변수를 사용 할 경우에 발생한다.

    ▷ 두 번째 예외는 ZeroDivisionError로 0으로 나누기를 시도 할 경우에 발생한다.

    ▷ 세 번째 예외는 TypeError로 함수나 연산 중 인식하지 못하는 자료형을 사용할 경우에 발생한다.


예외 발생의 예)

# 첫번째 예외의 예

In[22]: print(qw)

Traceback (most recent call last):

  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code

    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-22-13b993459970>", line 1, in <module>

    print(qw)

NameError: name 'qw' is not defined


# 두번째 예외의 예

In[23]: 1/0

Traceback (most recent call last):

  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code

    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-23-05c9758a9c21>", line 1, in <module>

    1/0

ZeroDivisionError: division by zero


# 세번째 예외의 예

In[24]: abs('2')

Traceback (most recent call last):

  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code

    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-24-1f07a960fcc0>", line 1, in <module>

    abs('2')

TypeError: bad operand type for abs(): 'str'



반응형

댓글