파이썬 Error 와 예외처리

sh_awtylol4·2022년 2월 17일
0

wecode 31기

목록 보기
4/24

망가진 부분을 알아야 고칠 수 있는법!

Python Error


위 사진처럼 파이썬을 사용하다가 발생하는 에러와 처리방법에 대해 알아보도록 하겠습니다.

코드를 입력하세요

1. SyntaxError

  • 잘못된 문법 (따옴표, 괄호, 콜론...)
  • 파이썬 버전이 낮아서 최신 버전 문법이 실행 안될 때도 있다.

2. NameError

  • 참조변수 없음
a, b = 10,5
print(c) # c는 사용한적 없음

3. ZeroDivisionError

  • 0으로 나누기 에러
a = 10
b = 0 # 영으로 나눌 수 없음.
print(a/b)

4. IndexError

  • 인덱스 범위에 들어있지 않음
x = [10, 20, 30]
print(x[3])

5. KeyError

  • Key 값을 찾을 수 없음(주로 딕셔너리에서 사용)
dic = {'name':'hoon', 'color':'red'}
print(dic['age']) # age라는 key 값이 존재하지 않음.
  • KeyError를 발생 시키지 않기 위해서는 get 메서드를 사용하면 된다.
    없으면 에러가 아닌 none 값이 출력된다.

6. AttributeError

  • 모듈 클래스에 있는 잘못된 속성을 사용시 발생
import random

a = random.radin(0,10) # radint(o) 
print(a)

7. ValueError

  • 참조값이 없을 때 발생
x = [1, 2, 3, 4, 5]
print(x.index(10)) # 10은 x에 없는 값!

8. FilenotFoundError

  • 외부파일을 찾지 못할때 발생
f = open('전화번호부.txt', 'r')
# 정확한 경로와 파일명을 입력해야 한다.

9. TypeError

  • 데이터 타입으로 인한 오류
x = [3]

y = (1,5)

z = "팔"

print(x+y+z) # 타입이 다르므로 에러 발생

10. ConnectionError

  • 서버를 켜지 않을때 발생 아직 서버를 사용안해서 공부 필요

예외처리

예외처리 전략

EAFP

  • “It’s Easier to Ask Forgiveness than Permission”
  • 미리 허락을 구하는 것보다는 나중에 용서를 구하는게 쉽다
    에러가 발생할 모든 상황을 미리 설정하는 것이 아니라, 일단 예외가 발생하지 않을 것이라는 가정을 하고 코딩 진행. 그러다 에러가 발생하면 그때 예외처리 실행
    일단 수행(try)시키고, 에러가 발생하면 그때 처리(except)하겠다는 것
    파이썬에서 권장하는 방법

LBYL

  • "Look Before You Leap”
  • 돌다리도 두드려 보고 건너라
    코드를 실행하기 전에 발생할 수 있는 에러의 조건을 다 가정하고 처리할지 조건문(if)으로 코딩하는 방법

에러가 발생!

위에서 정리한 것과 같이 에러가 발생하면 그 위치에서 프로그램이 종료가 되어 그 이후의 코드들은 실행되지 않는다.
유저가 사용하던 프로그램이 에러로 인해 정지되는 것은 큰 문제가 된다.
예외처리를 이용 에러로 인해 프로그램이 종료되거나 멈추는 것을 방지한다.

  1. try : 에러 발생 가능성이 있는 코드 실행 에러가 발생하면 그 지점 이후의 코드들은 실행되지 않는다
  2. except : 에러 발생 시 (생략 가능, 여러개 사용 가능, 에러 처리하려면 필수)
  3. else : 에러가 발생하지 않았을 경우 실행 (생략 가능, except 있어야 사용 가능)
  4. finally : 에러가 발생해도, 발생하지 않아도 무조건 실행 (생략 가능)
  5. raise : 에러를 원할때 발생시켜야 할 경우 사용
class BigNumberError(Exception):
    pass
class BigNumberError(Exception):
    def __init__(self, msg):
        self.msg = msg
    def __str__(self):
        return self.msg
    
try:
    print("한 자리 숫자 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    if num1 >= 10 or num2 >= 10:
        # raise ValueError
        # raise BigNumberError
        raise BigNumberError("입력값 : {0}, {1}".format(num1, num2))
    print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))
except ValueError:
    print("잘못된 값을 입력하셨습니다. 한 자리 숫자만 입력하세요")
except BigNumberError as err:
    print("에러 발생. 한 자리 숫자만 입력하여 주세요.")
    print(err)
finally:
    print("계산기를 이용해 주셔서 감사합니다.")

이제 터미널을 실행하다 에러가 떠도 겁먹지 않게 되었다. 그리고 무엇이 문제인지 알게되어 좀더 쉽게 수정을 할 수 있지 않을까...?

profile
포기하는 그 순간이 바로 시합종료예요...

0개의 댓글