티스토리 뷰

반응형

객체지향 언어에서는 가지고 있는 기능 중에 하나인 예외처리와 쓰레드에 대해 살펴보겠습니다.

 

youtu.be/16ji91Jokew

모든 강의 자료 : www.codingnow.co.kr/

예외처리 (try except)

객체지향 언어의 장점이지만 단점은 기존 메소드를 손쉽게 가져와 사용할 수 있지만 잘못된 동작에 의해 예상하지 못한 에러가 발생하여 프로그램이 중단되는 경우가 있습니다.

중요한 프로젝트인 경우 예외 상황에 의해 프로그램이 중단되면 큰 문제가 발생할 수 있습니다.

 

이것을 대처할 수 있도록 try - except 를 지원하고 있습니다.

 

기본 구조는 다음과 같습니다.

try:
    ...
except [발생 오류[as 오류 메시지 변수]]:
    ...

사용 예제를 살펴 보겠습니다.

try:
    print('문제없는 구간')
    a = 1/0
except Exception as ex:
    print(ex)

출력 결과입니다.

'문제없는 구간'을 print하고 1을 0으로 나누는 예외상황이 발생하여 except가 발생한 예제입니다.

'Exception' 모든 예외상황을 처리합니다.

만약 0으로 나눈 것만 처리하려면 다음과 같이 합니다.

try:
    print('문제없는 구간')
    a = 1/0
except ZeroDivisionError:
    print('0으로 나누었습니다.')
except Exception as ex:
    print(ex)

출력 결과입니다.

ZeroDivisionError 를 통해 에러를 처리합니다.

 

여기에는 finally이 있는데 이것은 예외상황이 없어도 무조건 실행하는 구간이됩니다.

try:
    print('문제없는 구간')
    #a = 1/0
except ZeroDivisionError:
    print('0으로 나누었습니다.')
except Exception as ex:
    print(ex)
finally:
    print("여기는 무조건 들어옵니다.")

출력결과를 보면 0으로 나눈 것을 주석처리하여 동작하지 않지만 무조건 finally를 실행해 주는 것을 볼 수 있습니다.

 

추가적으로 인덱싱 에러처리입니다. 즉 발행할 error를 알고 있다면 이와 같이 예외 처리 할 수 있습니다.

try:
    print('문제없는 구간')
    a = [0,1,2]
    print(a[4])
except IndexError:
    print('인덱싱 에러입니다.')
except Exception as ex:
    print(ex)
finally:
    print("여기는 무조건 들어옵니다.")

또는 다음과 같이 중복으로 처리도 가능합니다.

try:
    print('문제없는 구간')
    a = [0,1,2]
    print(a[4])
except (IndexError, ZeroDivisionError):
    print('인덱싱 또 0으로 나눈 에러입니다.')
except Exception as ex:
    print(ex)
finally:
    print("여기는 무조건 들어옵니다.")

 

쓰레드(Thread)

이번에는 쓰레드에 대해 살펴 보겠습니다.

쓰레드는 컴퓨터가 처리하는 단위라고 할 수 있습니다.

일반적으로 하나의 쓰레드로 한줄 한줄 컴퓨터가 실행하여 처리하지만 멀티 쓰레드는 2개 이상의 프로그래밍을 시간 할 당을 통해 마치 동시에 처리하는 것처럼 하는 기능입니다.

 

다음 그림과 같이 1개의 쓰레드로 실행하게 되면 1번을 다 처리하고 2번을 처리하겠지만

2개의 쓰레드를 사용하면 1번과 2번이 번갈아가며 실되게 됩니다.

즉 동시에 처리 되어야 하는 경우에 사용되게 됩니다.

예제소스를 살펴 보겠습니다.

def sum(name, value):
    for i in range(0, value):
        print("thread ", name ," : ", i)


t1 = threading.Thread(target=sum, args=('1번', 20))
t2 = threading.Thread(target=sum, args=('2번', 20))

t1.start()
t2.start()

print("Main Thread")

쓰레드 t1, t2를 코드적으로 한줄 차이로 실행하였지만

t1.start()

t2.start()

 

쓰레드는 시간을 조율하여 아래와 같이 번갈아 가며 실행하고 있습니다.

#파이썬 #예외처리 #쓰레드 #try #thread

반응형