본문 바로가기
IT 개인학습/Python

Error, try ... except

by kiimy 2021. 7. 18.
728x90
728x90

Error

1. 실행전 Error => 구문에러( SyntaxError ) = 문법적인 문제가 발생

2. 실행중 Error => 예외( Exception, RuntimeError )

==> 예외처리해줄 수 있음 ( Exception handling = 조건문 or try except 구문 )

Error list

  • AssertionError: assert 문이 제대로 작동하지 않을 때 발생합니다.
  • IndexError: 참조 하려는 인덱스가 범위를 벗어날 때 발생합니다.
  • KeyError: 참조 하려는 키가 기존 키 집합에서 찾을 수 없을 때 발생합니다.
  • KeyboardInterrupt: 사용자가 인터럽트 키(Control + C, 혹은 Delete)를 누를 때 발생하며, 모든 Exception을 잡는 코드에 의해 인터프리터가 종료하는 것을 막지 못하도록 Exception 상위에 있는 BaseException을 직접 계승 합니다.
  • MemoryError: 메모리가 부족하지만, 가비지 컬렉터가 일부 객체의 삭제를 함으로써 복구될 수 있는 경우 발생합니다.
  • NameError: 참조하는 지역, 전역 변수 혹은 함수, 클래스 등을 찾을 수 없을 때 발생합니다.
  • OSError: 시스템 함수가 시스템 관련 에러를 돌려줄 때 발생합니다. (파일을 찾을 수 없거나, 디스크가 찼거나..)
  • OverflowError: 산술 연산의 결과가 너무 커서 표현 할 수 없을 때, 혹은 정수 범위를 벗어났을 때 발생합니다.
  • RecursionError: 최대 재귀 깊이가 초과하였을 때 발생합니다.
  • TypeError: 연산이나 함수가 부적절한 데이터 타입의 객체에 적용 되었을 때 발생합니다.
  • ValueError: 연산이나 함수가 부적절한 값을 가진 객체에 적용 되었을 때 발생합니다.
  • ZeroDivisionError: 나누기, 나머지 연산의 두 번째 인자가 0일 때 발생합니다.
  • 참조 : https://justkode.kr/python/try-except

try, except 구문

except - if, elif, else 조건문처럼 차례대로 오류 검출

예외도 클래스 상속으로 구현되며 다음과 같은 계층으로 이루어져 있습니다.

보통 파이썬에서 새로운 예외를 만들 때는 Exception을 상속받아서 구현합니다.

참조 : https://wayhome25.github.io/python/2017/02/26/py-12-exception/

try:
    예외가 발생할 가능성이 있는 코드가

except: 예외종류 as 할당 변수지정 # ==> class
    예외가 발생했을 때 실행할 코드

else: # try 문이 에러 발생 없이 정상적으로 실행 되었을 때, else 문을 실행
    예외가 발생하지 않았을 때 

finally: # except 문이 실행 됐든, 안 됐든 상관없이, finally문을 실행
    무조건 실행할 코드
# case1
try:
    예외가 발생할 가능성이 있는 코드가

finally:
    무조건 실행할 코드
    
# case2
try:
    예외가 발생할 가능성이 있는 코드가

except: 예외종류 as 할당 변수지정 # ==> class
    예외가 발생했을 때 실행할 코드
    
# case3
try:
    예외가 발생할 가능성이 있는 코드가

except: 예외종류 as 할당 변수지정 # ==> class
    예외가 발생했을 때 실행할 코드

else: or finally:
    예외가 발생하지 않았을 때 
    
# case4 ==> SyntaxError 나옴
try:
    예외가 발생할 가능성이 있는 코드가

else: or finally:
    예외가 발생하지 않았을 때

* 프로그램 실행 오류 중 NameError가 있다면

try:
    예외가 발생할 가능성이 있는 코드가

except ValueError:
      pass # ==> 해당에러는 pass 시킨다
except IndexError:
        .
        .
        .    # 프로그램이 죽어
        
except exception: # ==> exception쓰면 프로그램 죽지 않는다

raise 구문 = 예외 강제 발생 

raise 예외('메세지')

구현되지 않은 부분이므로 확실하게 문제발생시키기

이 부분을 그냥 넘어가면 문제가 발생하니 강제 종료

try:
    x = int(input('3의 배수를 입력하세요: '))
    if x % 3 != 0:                                 # x가 3의 배수가 아니면
        raise Exception('3의 배수가 아닙니다.')    # 예외를 발생시킴
    print(x)
except Exception as e:                             # 예외가 발생했을 때 실행됨
    print('예외가 발생했습니다.', e)
    
# 3의 배수를 입력하세요: 5 (입력)
# 예외가 발생했습니다. 3의 배수가 아닙니다.

## raise로 예외를 발생시키면 raise 아래에 있는 코드(print(x))는 실행되지 않고 바로 except로

Class Exception

참조 : https://dojang.io/mod/page/view.php?id=2398 

 

파이썬 코딩 도장: 38.1 try except로 사용하기

Unit 38. 예외 처리 사용하기 예외(exception)란 코드를 실행하는 중에 발생한 에러를 뜻합니다. 다음과 같이 10을 어떤 값으로 나누는 함수 ten_div가 있을 때 인수에 따라 정상으로 동작하기도 하고 에

dojang.io

## 가정 설정문 assert

https://cord-ai.tistory.com/180

 

assert

1. if문 2. try ... except - 예외처리 3. assert - 가정 설정문 - 원하는 조건의 변수 값을 보증받을 때까지 assert로 테스트 할 수 있다. - 조건을 가정해 값을 보증하는 방식으로 코딩 하기 때문에 이를 '방

cord-ai.tistory.com

 

728x90

'IT 개인학습 > Python' 카테고리의 다른 글

Python 내장함수 및 라이브러리  (0) 2022.05.07
Python에서 시간 측정하기(Decorator, Command line)  (0) 2021.09.26
Class 상속(inheritance)  (0) 2021.07.18
매직메소드  (0) 2021.07.18
Class , Object , Method ( OOP )  (0) 2021.07.18

댓글