파이썬 에러와 예외

1 개념[ | ]

Python Errors and Exceptions
파이썬 에러와 예외
  • 에러에는 크게 문법 에러(Syntax errors)와 예외 사항(Exceptions)으로 나뉨
  • 문법 오류는 말 그대로 코드상 문법적 오류가 있을 시 발생하는 에러를 말함
  • 예외 사항은 문법적으로는 문제가 없지만 실행 시 에러가 발생. 에러의 발생이 조건 없이 발생한다면 치명적인 에러(Fatal error)로 분류 가능함

2 문법 오류 (Syntax Errors)[ | ]

  • while Ture다음에 콜론(':')이 없어 발생하는 오류
>>> while True print("Hello World")
  File "<stdin>", line 1
    while True print("Hello World")
                   ^
SyntaxError: invalid syntax
→ 문법 에러가 발생한 가장 초기 지점에서 작은 화살표('^')로 문법 오류임을 알려줌

3 예외 (Exceptions)[ | ]

예시 1
>>> 10 * (1/0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 4 + spam*3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'spam' is not defined
>>> '2' + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
→ 문법적 오류는 없으나 예외에 의한 에러가 발생했음
ZeroDivisionError: division by zero (나누기를 0으로 수행하여 발생)
NameError: name 'spam' is not defined (미리 정의되지 않은 spam 변수가 사용되어 발생)
TypeError: Can't convert 'int' object to str implicitly (형이 다른 두개의 인자를 더하여 발생한 형에러)
예시 2
# a.py
students = {"SeongMin":10, "DongHyun":11, "JiWon":12}
print(students["john"])
  • a.py 실행
john@zetawiki:/john$ python b.py
Traceback (most recent call last):
  File "b.py", line 2, in <module>
    print(students["john"])
KeyError: 'john'
→ 존재하지 않는 key를 호출하여 KeyError가 발생

4 예외 처리 1[ | ]

  • try ~ except 문으로 예외 처리가 가능함
※ 특정 예외(에러)의 선택 처리 가능함
# a.py
while True:
    try:
        x = int(input("Please enter a number:"))
        break
    except ValueError:
        print("That was no number. Try again with number.")
→ try가 기본적으로 수행됨. 만약 예외가 발생하지 않으면 break 문을 만나 종료되며 except 문의 내용은 생략됨
예외가 발생하면 except가 동작하게 됨
※ ValueError인 예외만 받으므로 다른 타입의 예외는 받지 않음
  • a.py 실행
john@zetawiki:/john$ python a.py
Please enter a number:'a'
That was no number. Try again with number.
Please enter a number:1
→'a'를 입력하면 ValueError가 발생하여 That was no number. Try again with number 메시지가 출력됨.
반면 숫자 1을 입력하면 break 문을 만나 종료되게 됨.

5 예외 처리 2[ | ]

  • try ~ except ~ else ~ finally 문으로 예외 처리가 가능함
try에서 예외 사항이 없으면 else 실행
finally는 무조건 실행
# a.py
def divide(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        print "Division by zero."
    else:
        print "Result is", result
    finally:
        print "Executed"

divide(4, 2)
divide(4, 0)
divide('4', '2')
  • a.py 실행
john@zetawiki:/john$ python a.py
Result is 2
Executed
Division by zero.
Executed
Executed
Traceback (most recent call last):
  File "a.py", line 13, in <module>
    divide('4', '2')
  File "a.py", line 3, in divide
    result = a / b
TypeError: unsupported operand type(s) for /: 'str' and 'str'
→ divide(4, 2) : try, else, finally 에서 각각 실행
→ divide(4, 0) : try, except, finally에서 각각 실행
→ divide('4', '2') : try, finally에서 각각 실행 및 except에서 처리되지 않은 예외 출력

6 같이 보기[ | ]

7 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}