제가 가끔 말씀드렸지만 언어를 배울 때는 직접 따라해보고, 만들어보는 것이 중요합니다. 여러분도 지금까지 함께 공부하면서 연습을 많이 해보셨겠죠? 그렇다면 아래와 같은 메시지도 많이 보셨을 것 같네요.
>>> print 방가~ File "<stdin>", line 1 print 방가~ ^ SyntaxError: invalid syntax
위에선 ‘방가~’라는 문자열을 출력하려고 했는데, 뭔가 문제가 생긴 것 같죠? 메시지가 난해한 것 같은데… 무슨 뜻인지 해독을 해볼까요?
File "<stdin>", line 1
- <stdin> 파일의 1번째 줄에서
print 방가~
^
- ^로 표시된 부분에
SyntaxError: invalid syntax
- 잘못된 구문으로 인해 오류가 발생했음
한 마디로 문법이 틀렸다는 얘기군요. 여기서 <stdin>이라는 건 표준 입력, 즉 키보드를 통해 입력되는 것을 뜻합니다. 대화식으로 작성하지 않고 파일로 작성해서 실행시켰다면 그 파일의 이름이 나왔겠지요.
이렇게 파이썬은 프로그램 실행 중에 문제가 생기면, 어디가 어떻게 잘못됐는지 판단해서 우리에게 알려줍니다. 그러면 우리는 그 부분을 수정해서 잘 작동하도록 하면 되지요.
그런데, 프로그램을 짜다보면 평소에는 잘 돌아가다가 가끔씩 문제가 생기는 경우도 있답니다. 다음의 예제가 바로 그런 경우인데요, 두 수를 곱하고 나눠서 더하는 함수입니다.
>>> def f(a, b): ... return (a * b) + (a / b) ... >>> f(4,2) 10
아직은 별다른 문제가 없어보이죠? 하지만 두 번째 인자로 0을 넘겨주면 난리가 납니다.
>>> f(3,0) Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 2, in f ZeroDivisionError: integer division or modulo by zero
정수를 0으로 나누는 오류가 발생했다고 하는군요. 원래 숫자를 0으로 나눌 수가 없죠? 그렇다면 이 함수는 손을 좀 봐야겠네요.
>>> def f(a, b): ... if a and b: # a와 b가 둘 다 0이 아닐 때 ... return (a * b) + (a / b) ... elif a: # 그렇지 않고 a만 0이 아닐 때 ... return '불능' ... else: # 둘 다 0일 때 ... return '부정' ...
이제 좀 그럴 듯 하네요.
>>> print f(3,0) 불능 >>> print f(0,0) 부정 >>>
OX퀴즈!! 이제 이 함수는 더 이상 오류가 생길 일이 없겠죠?
그렇다구요?
과연 그럴까요…
>>> f(300000, 500000) Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 3, in f OverflowError: integer multiplication
인자로 받은 두 수의 곱이 정수형으로 처리하기에는 너무 큰 값이라서 오류가 발생했군요.
음… 또 이런 건…?
>>> f(이십, 오)
#%$^*#<%@??? --;
쩝…
프로그램을 작성하다보면 오류가 발생할 수 있는 경우는 끝도 없습니다. 우리가 이런 오류를 모두 예상해서 프로그램을 작성한다는 것은 정말로 '노가다'라고 밖에 할 수 없겠네요. 앞의 예에서 불능과 부정을 정해준 것은 나쁘지 않다고 하더라도, 다른 두 경우까지 각각 처리해주는 건 시간 낭비이겠죠?
다행히 파이썬에선 이런 문제를 쉽게 해결해주는 방법이 있답니다. 위와 같이 프로그래머의 의도와 동떨어진 상황이 발생하는 것을 예외(exception)라고 해서, 예외가 발생하면 어떤 조치를 취할 것인지 정해주는 것이죠.
그럼 예외를 처리할 수 있도록 함수를 수정해 보도록 하지요.
>>> def f(a, b): ... try: ... if a and b: ... return (a * b) + (a / b) ... elif a: ... return '불능' ... else: ... return '부정' ... except: ... return '똑 바로 살아라'
보시는 것처럼 방법은 간단합니다. 기본적인 문장들을 try 밑에 넣어주고, 예외가 발생했을 때 처리할 부분은 except 밑에 넣어주면 됩니다. 일단 시도(try)해보다가 문제가 생기면(except) 처리해주는 것이죠.
예외는 오류(error)보다 더 넓은 개념이긴 하지만 지금은 비슷하게 생각하셔도 되구요, C++과 Java에서도 비슷하게 사용된답니다.
새벽 세 시가 넘어버렸네요. 어제 쉬기는 했지만 오늘 하루는 또 커피 먹고 맴맴~해야겠어요.
그럼 좋은 하루 되세요~.
출처 : wikidocs 왕초보를 위한 파이썬
'Python > 왕초보를 위한 파이썬' 카테고리의 다른 글
9.1. Tkinter에서 마우스 이벤트 처리 (0) | 2012.04.12 |
---|---|
09. GUI (0) | 2012.04.12 |
7.5. 특별한 메서드들 (0) | 2012.04.12 |
Python 문자열 (0) | 2012.04.10 |
Python 실습_Replace at Index (0) | 2012.04.10 |
댓글