설치 1강 2강 3강 4강 5강 6강 7강

5강

예외처리

  • 프로그램을 만들다 보면 오류는 발생하게 되어있다.
  • 오류가 없는 프로그램을 만들면 좋지만 상황상 어쩔 수 없이 오류가 발생하는 경우가 있다.
  • 오류(예외)가 발생하면 예외를 처리할 수 있는 핸들러를 찾아내어 처리를 맡김.(지금 하려는 작업)
  • 핸들러가 없으면 그 즉시 파이썬 프로그램이 종료되며 그 예외내역을 화면에 출력함.
  • 예외는 중요한 과정 무조건 없애는 것보다는 잘 이용하는 것이 중요함!!

각종 예외

In [1]:
print(int('a'))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-1-129476680eb9> in <module>()
----> 1 print(int('a'))

ValueError: invalid literal for int() with base 10: 'a'
In [2]:
4/0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-2-6de94738d89d> in <module>()
----> 1 4/0

ZeroDivisionError: division by zero
In [3]:
a=[1,2,3]
a[4]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-3-de1dddb94d68> in <module>()
      1 a=[1,2,3]
----> 2 a[4]

IndexError: list index out of range

try , except 1

try: 실행하고자 하는 구문 except: 위의 명령의 예외발생시 실행하는 구문

In [4]:
try:
    print(int('a'))
except:
    print("에러가 발생하였습니다.")
에러가 발생하였습니다.
In [5]:
try:
    print('a')
except:
    print("에러가 발생하였습니다.")
a

try , except 2

try: ... except 특정 오류 이름: ...

  • 위에서 지정한 특정 오류가 발생할 때만 except를 실행함.
In [6]:
a
Out[6]:
[1, 2, 3]
In [7]:
try:
    a[4]
except IndexError:
    print("IndexError 발생")
IndexError 발생
In [8]:
try:
    a[4]
except ZeroDivisionError:
    print("ZeroDivisionError 발생")
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-8-05d12369b0cf> in <module>()
      1 try:
----> 2     a[4]
      3 except ZeroDivisionError:
      4     print("IndexError 발생")

IndexError: list index out of range
In [9]:
try:
    a[4]
except IndexError:
    print("IndexError 발생")
except ZeroDivisionError:
    print("ZeroDivisionError 발생")
IndexError 발생
In [10]:
try:
    4/0
except IndexError:
    print("IndexError 발생")
except ZeroDivisionError:
    print("ZeroDivisionError 발생")
ZeroDivisionError 발생

위와 동일한 코드. 내부의 에러 명령을 출력함.

In [11]:
try:
    4/0
except IndexError as e: # e는 변수이므로 아무것이나 쓰면 됨.
    print(e)
except ZeroDivisionError as e:
    print(e)
division by zero

다음과 같이 한꺼번에 쓸 수도 있다.

In [12]:
try:
    a = [1,2]
    print(a[3])
    4/0
except (ZeroDivisionError, IndexError) as e:
    print(e)
list index out of range
In [13]:
try:
    a = [1,2]
    4/0
    print(a[3])
except (ZeroDivisionError, IndexError) as e:
    print(e)
division by zero
In [16]:
try:
    print(int('a'))
    a = [1,2]
    4/0
    print(a[3])
except (ZeroDivisionError, IndexError) as e:
    print(e)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-c595bffd6310> in <module>()
      1 try:
----> 2     print(int('a'))
      3     a = [1,2]
      4     4/0
      5     print(a[3])

ValueError: invalid literal for int() with base 10: 'a'
In [3]:
try:
    [1,2,3][3]
except Exception as e:
    print(e)
list index out of range
In [4]:
# 모든 에러를 방지하고 출력할 수 있다. 사용에 조심. 에러를 발생시키는 것이 더 좋은 코드임.

연습문제 https://programmers.co.kr/learn/challenge_codes/86

no_continuous함수는 스트링 s를 매개변수로 입력받습니다.

s의 글자들의 순서를 유지하면서, 글자들 중 연속적으로 나타나는 아이템은 제거된 배열(파이썬은 list)을 리턴하도록 함수를 완성하세요. 예를들어 다음과 같이 동작하면 됩니다.

s가 '133303'이라면 ['1', '3', '0', '3']를 리턴 s가 '47330'이라면 [4, 7, 3, 0]을 리턴

In [17]:
def no_continuous(s):
    # 함수를 완성하세요
    return []
In [18]:
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( no_continuous( "133303" ))
[]
In [ ]:
 

blog comments powered by Disqus