본문으로 이동

일반인을 위한 파이썬 지침서/불완전을 다루기(또는 에러처리법)

위키책, 위키책

자, 이제 여러분은 완벽한 프로그램을 가지고 있으며, 한가지 세부사항만 빼고는, 그것은 결점없이 실행된다. 그것은 사용자의 무효한 입력에 충돌을 일으킬 것이다. 걱정하지 마라, 왜냐하면 파이썬은 여러분을 위하여 특별한 제어 구조를 구지고 있기 때문이다. 그것을 일컬어 try라고 부르며 그것은 뭔가를 하려고 시도한다. 여기에 한가지 문제점을 가지고 있는 프로그램의 예제가 있다.

print "Type Control C or -1 to exit"
number = 1
while number != -1:
    number = int(raw_input("Enter a number: "))
    print "You entered: ",number

여러분이 @#&를 입력해 넣을 때 프로그램이 다음과 같은 출력을 보이는 것을 주목하라.

Traceback (innermost last):
  File "try_less.py", line 4, in ?
    number = int(raw_input("Enter a number: "))
ValueError: invalid literal for int(): @#&

여러분이 볼 수 있듯이 int 함수는 숫자 @#&에 불행해 한다 (물론 틀림없이 그럴거다). 마지막 라인을 보면 그 프로그램이 무엇인지 알 수 있다; 파이썬은 ValueError 를 발견했다. 어떻게 우리의 프로그램이 이것을 다룰 수 있을까? 우리가 먼저 해야 할일은 : 에러가 발생한 지점을 try 블록에 집어 넣는다, 그리고 둘째로 : 파이썬에게 ValueError들을 다루는 법을 가르쳐 준다. 다음의 프로그램이 이 일을 한다.

print "Type Control C or -1 to exit"
number = 1
while number != -1:
    try:
        number = int(raw_input("Enter a number: "))
        print "You entered: ",number
    except ValueError:
        print "That was not a number."

이제 우리가 새로운 프로그램을 실행하고 거기에다 @#&를 주면 프로그램은 우리에게 ``That was not a number.라고 말해주고서는 그전에 자신이 하던 작업을 계속한다.

여러분의 프로그램이 어떤 에러들을 계속 가지고 있고 여러분이 다루는 법을 알고 있다면, try 블록에 코드를 집어 넣어라, 그리고 그 에러를 처리하는 방법을 except블록에 집어 넣어라.