본문 바로가기
컴퓨터관련/Python

[python]파이썬 예외처리 및 중첩 예외처리

by 빛과 어둠사이 2019. 10. 25.
728x90
반응형
SMALL

이번에는 python에서의 예외처리를 하는 방법을

정리해보려고 합니다.

예외처러는 여러 개발 언어에서

지원이 되고 있습니다.

Java, C언어 등에서도 되고 있습니다.

파이썬에서도 제공이 되어서

정리를 해보려고 합니다.


python에서는 예외 처리를 할 때,

try except 명령어를 이용하여

에외처리를 진행합니다.



사용하는 방법은 다음과 같습니다.

try:
    일반코딩
except [발생 오류[as 오류 메시지 변수]]:
    오류났을 때 코딩


위처럼 사용을 하면 됩니다.

일반 코딩은 일반적인 소스입니다.

일반코딩 부분에서 에러가 발생이 되면

except로 가서

에러를 확인하고 처리를 하게 되는 것입니다.


이제 실제 예제를 가지고

확인해보도록 하겠습니다.


우선, 에러를 강제로 발생되도록 해 보았습니다.

print(10 / 0)

위처럼 코딩을 하였습니다.


위의 소스는

10을 0으로 나눔으로 인해

0으로 나누는 에러가 발생하는 것입니다.



위처럼 코딩을 하고

실행을 해 보았습니다.

결과는 다음과 같이 나옵니다.




위처럼 0으로 나누기 때문에

에러가 발생이 된다고

나오고 있습니다.



이제 실제 예외 처리를 하는 방법을

확인해보도록 하겠습니다.


try:
    print(10 / 0)
except :
    print("error")


위처럼 코딩을 하였습니다.

에러가 발생되면,

error이라는 문구가 출력이 되록

해 놓은 것입니다.



위처럼 소스를 작성하여

실행을 해 보았습니다.

그랬더니 결과는 다음과 같이 나왔습니다.



에러가 발생되는 것이 아닌,

위처럼 error이라고 해서

출력이 되는 것을

확인할 수 있습니다.




오류 이름을 알면

다음과 같이도 코딩을 할 수 있습니다.

try:
    print(10 / 0)
except ZeroDivisionError as e:
    print(e)

위 소스를 설명드리면 다음과 같습니다.

우선 에러가 발생되는 것은 동일합니다.

그리고 오류이름이 

ZeroDivisionError 일 경우,

해당 에러 메시지가 화면에 나오도록

한 것입니다.



위처럼 코딩을 하였고

실행을 하면 결과는 다음과 같습니다.



위처럼 에러 메시지가 나오는 것을

확인할 수 있습니다.



에러 문구를 정확하게 모를 때는

다음과 같이 해주시면 되십니다.


try:
    print(10 / 0)
except Exception  as e :
    print(e )

위처럼 하면

에러가 발생되었을 때,

모든 에러이든 다 에러 문구를 가져오게끔 하는 것입니다.



위처럼 코딩을 하였고

실행을 하였습니다.

그랬더니 결과는 다음과 같이

나오게 되었습니다.




위처럼 정확한 에러 문구를 몰라도

처리를 할 수 있습니다.




또한, except를 여러개 사용할 수 있습니다.

에러코드에 따른 처리를 

여러개로 나눠서 할 수 있습니다.

except를 중첩사용 해 주시면 되십니다.


예제 소스는 다음과 같습니다.

try:
    print(10 / 0)
except ZeroDivisionError as e:
    print("zero error : " , e)
except Exception as e :
    print("ex error : " , e)


위처럼 해주시면 되십니다.

except를 여러개 사용하였습니다.

에러코드에 따른 문구를

서로 다르게 출력할 수 있습니다.

이렇게 중첩사용을 하여

여러 상황에 대비할 수 있습니다.



위처럼 코딩을 하였으며

실행을 하면

결과는 다음과 같습니다.



중첩이지만

에러코드가 정확하게 일치하는 것이 있기 때문에

0으로 나누는 에러에 대한

처리 소스가 나오게 되는 것입니다.





또한, 에러 상황을 회피할 수 있습니다.

해당 에러가 발생했을 때,

그냥 무시하고 실행하도록 하는 것이라고

생각을 해도 될 것 같습니다.

회피하는 명령어는 pass 입니다.


이제 실제 소스를 보여드리도록 하겠습니다.

try:
    print(10 / 0)
except ZeroDivisionError as e:
    pass

위 소스는 0으로 나누는 것에 대한

에러가 발생했을 때

pass를 통해

에러를 회피하는 것입니다.



위처럼 코딩을 하였습니다.

그리고 실행을 하면

결과는 다음과 같습니다.



위처럼 회피를 하였기 때문에

에러가 발생하지는 않았지만

별다른 실행 소스가 없었기 때문에

별다른 출력도 없는 것을

확인할 수 있습니다.





이번에는 finally에 대해 

정리를 해 보도록 하겠습니다.

파이널은 무조건 실행을 하게 되는 것입니다.


에러가 발생이 되었든,

발생되지 않았든

무조건 실행이 되는 것입니다.


그렇다보니, 보통 close 등

종료하는 것들을

이 곳에 많이 넣고 사용을 합니다.


예제 소스는 다음과 같습니다.

try:
    print(10 / 0)
except ZeroDivisionError as e:
   print("zero error : " , e)
finally :
    print("Python End")

위처럼 하게 되면

에러가 발생이 되었든,

발생되지 않았든

무조건 Python End라는 문구는

출력이 되는 것입니다.




위처럼 코딩을 하고 실행을 하였습니다.

그러면 결과는 다음과 같습니다.



위처럼 에러가 발생이 되었고,

그래서 에러에 대한 문구가 나왔습니다.

그리고 finally에서의 

Python End라는 문구가

출력되게 된 것입니다.



에러가 발생되지 않아도

되는 것을 확인해보도록 하겠습니다.

try:
    print(10 / 5)
except ZeroDivisionError as e:
   print("zero error : " , e)
finally :
    print("Python End")

위처럼 코딩을 하였습니다.

10을 5로 나누는 것이기 때문에

에러가 발생하지 않습니다.



위처럼 코딩을 하였고

실행을 하였습니다.

결과는 다음과 같습니다.



위처럼 결과가 나왔습니다.

정상적으로 나누기 몫이 나오게 됩니다.

그리고 finally를 통해

Python End라고 나오게 되는 것입니다.


이렇게 무조건 나오기 때문에

무조건 실행이 되어야 하는 것들은

이 곳에 넣어주시면 되십니다.





강제로 에러를 발생시킬 수도 있습니다.

강제로 에러를 발생시키는 명령어는

raise

입니다.


이제 실제 예제를 보여드리도록 하겠습니다.

try:
    print(10 / 3)
    raise ValueError #강제 에러 발생. 에러코드 ValueError
except ZeroDivisionError as e:
   print("zero error : " , e)
except ValueError as e :
    print("ValueError 에러")
finally :
    print("Python End")

위처럼 코딩을 하였습니다.


10을 3으로 나누고,

그 다음에 강제로 에러를 발생시킨 것입니다.

강제로 ValueError를 발생시킨 것입니다.



위처럼 코딩을 하였습니다.

그리고 실행을 하면

결과는 다음과 같습니다.




위처럼 결과가 나와지는 것을 

확인할 수 있습니다.

10/3을 현 결과는

정상적으로 출력이 되었습니다.

그리고 raise 명령어 때문에

에러가 발생이 되었습니다.

그래서 에러에 관한 문구가 나와지는 것을

볼 수 있습니다.



이렇게 특정 상황에서 에러를 발생시켜

그 상황을 별도로 처리할 수 있습니다.

하지만, 이것은 추후에 소스를 다시 분석하거나

유지보수할 때 별로 좋지는 않습니다.

그렇기 때문에 많이 사용하지 않는 것이 좋습니다.





이번에는 파이썬에서의 예외처리에 대해

정리를 해 보았습니다.

파이썬에서는 java나 C언어에서와는 다르게 

try except로 예외처리를 한 다는 것만

잘 기억하고 있으면 될 것 같습니다.


예외처리는 잘 사용하면 매우 유용하고

좋은 기능입니다.

그러니 참고하시어 개발하시는 도움이 되시면

좋겠습니다.



이상으로 파이썬에서의 예외처리, 중첩 예외처리에 대한

정리였습니다~



728x90
반응형
LIST