본문 바로가기
  • Hello_
Python

[Python] try except 활용하여 오류 모아보기

by LDwDL 2023. 2. 8.
728x90
반응형

본 포스팅에서는 for 문과 try except를 사용해서 예외 처리를 함과 동시에 발생한 오류를 모아서 출력하는 알고리즘을 구성하고자 한다.

 

try except 구문

try except 구문은 예외처리를 할 때 사용되며 try문 안에 실행하고자 하는 내용을 포함시키고 만일 try문에서 오류가 발생하면 except문으로 넘어간다. 즉 예외로 처리할 내용을 except문 안에 기입하면 된다. 

 

간혹 대용량 데이터 처리를 하는 중 중간에 오류가 발생하여 실행되던 코드가 중단되는 경험은 한두 번씩 있을 것이다. 이럴 때 유용한 구문이 try except 구문으로 오류가 발생하더라도 우선은 모든 데이터를 처리한 뒤에 예외 데이터를 처리할 수 있도록 해준다.

 

다만 어떤 데이터가 예외 데이터이며 어떠한 오류로 인해 예외 처리가 되었는지 알아야 하기에 해당 알고리즘 구성을 예시를 통해 얘기해보고자 한다.

 

오류 모아보기

list = [1, 0.2, '3', str(4), [], 6]

for element in list:
    print(element + 1)
    
"""
2 1.2 
--------------------------------------------------------------------------- 
TypeError Traceback (most recent call last) 
/aidata/lung/WORKSPACE/workspace_s/deep-lung-ln-02_v2/nodulenet/_.ipynb Cell 54 in <cell line: 1>() 
1 for element in list:
 ----> 2 print(element + 1) 

TypeError: can only concatenate str (not "int") to str
"""

 

예시는 list라는 변수의 요소들을 하나씩 불러내어 +1을 하는 알고리즘이다. 당연히 1과 0.2은 숫자 데이터이기에 문제없이 출력되지만 '3'은 문자 형태이기에 오류가 발생한다.

 

하지만 마지막 요소인 6까지 실행을 시켜 오류가 발생하는 건 pass 하고 나머지를 모두 출력해 보자.

 

for element in list:
    try:
        print(element + 1)
    except:
        pass

"""
2 1.2 7
"""

 

try except을 활용하여 숫자인 데이터는 모두 문제없이 출력되었다. 여기서 오류가 발생한 데이터와 해당 데이터가 무슨 오류로 except 구문으로 가게 되었는지 알아보자.

 

error_elements = []
error_messages = []

for element in list:
    try:
        element + 1
    except Exception as error_message:
        error_elements.append(element) # 문제 발생 요소 append
        error_messages.append(error_message) # 해당 에러 메시지 append

for e,m in zip(error_elements,error_messages):
    print(e, ': ', m)

"""
3 : can only concatenate str (not "int") to str 
4 : can only concatenate str (not "int") to str 
[] : can only concatenate list (not "int") to list
"""

 

우선 오류가 발생하는 요소들을 error_elements, 오류 메시지들을 error_messages라고 하자.

 

이전 코드와 동일하지만 except 문에서 예외 처리된 요소('element')와 오류 메시지('error_message')를 append 하여 모아두자.

 

이후 각 요소와 오류메시지를 출력하여 보면 for문에서 어떤 값이 문제가 발생했고 그 문제는 무엇인지 한눈에 볼 수 있다.

 

 

굉장히 간단한 알고리즘이지만 데이터량이 큰 task에서는 이 구문이 큰 역할을 해준다. 문제가 없는 데이터는 모두 처리가 되고 예외 처리되었던 데이터만 다시 분석하여 소규모 처리를 해주면 되기 때문이다.

 

필자는 이를 까먹고 코드를 실행시키다가 중간에 오류가 발생하여 다시 코드를 실행시켜야 했던 아픈 기억이 있다... 꼭 사용하자..

 

728x90
반응형

댓글