구문 오류 : 프로그램의 문법적인 오류로 프로그램이 실행조차 되지 않게 만드는 오류입니다
예외(런타임 에러) : 프로그램 실행 중에 발생하는 오류입니다. try catch 구문 등으로 처리할 수 있습니다. 반대로 구문 오류는 실행 자체가 안 되므로 try catch 구문으로 처리할 수 없습니다.
기본 예외 처리 :  조건문 등을 사용해 예외를 처리하는 기본적인 방법입니다.
try except 구문 : 예외처리에 특화된 구문입니다.

   코드를 작성하다 보면 다양한 오류를 마주하게 될것입니다. 이러한 오류는 크게 실행 전에 발생하는 '구문 오류(systax error)'와 실행 후에 발생하는 '예외(exception)'로 구분할 수 있습니다. 이때 예외는 프로그램이 정상적으로 실행되는 것처럼 보이다가 중간에 프로그램을 죽게 만들어 버립니다. 따라서 '예외 처리(exception handling)'로 예외를 처리해야 합니다.

◆ 오류의 종류

  1. 프로그램 실행 전에 발생하는 오류

  2. 프로그램 실행 중에 발생하는 오류

- 두 가지 모두 '오류'라고 부릅니다. 실행 전에 발생하는 오류는 '구문 오류'라고 부르며, 프로그램 실행 중에 발생하는 오류를 '예외' 또는 '런타임 오류'라고 구분합니다. 

[ 구문 오류 ]

- 구문 오류는 괄호의 개수, 들여쓰기 문제 등 문법적인 오류로 인해 프로그램이 실행되기도 전에 발생하는 오류입니다.

※ 구문 오류는 프로그램이 실행조차 되지 않기 때문에 예외 처리 방법으로 처리할 수 없습니다. 문법적인 문제가 발생한 코드를 수정해 줘야 합니다.

[ 예외 ]

- 예외 또는 런타임 오류는 실행 중에 발생하는 오류를 의미합니다.

[ 기본 예외 처리 ]

- 예외를 해결하는 모든 것을 '예외 처리'라고 부릅니다. 예외를 처리하는 방법은 다음 두가지로 나뉩니다

  ① 조건문을 사용하는 방법

  ② try 구문을 사용하는 방법

① 조건문으로 예외 처리하기

  - 일단 조건문을 사용해서 예외를 처리하는 방법부터 살펴보겠습니다. 이와 같은 예외 처리 방법을 기본 예외 처리라고 부릅니다.

- 정수를 입력받고 싶습니다. 만약 정수를 입력하지 않으면(문자나 특수문자등이 입력되면) else 구분 쪽이 실행되서 '입력이 바르지 않았습니다'라는 문자열을 출력하게 됩니다.

파이썬 예외처리

※ 프로그램을 작성할 때는 항상 예외적인 상황까지 모두 생각하는 습관을 기르는 게 좋습니다. 그러한 상황이 언제 발생하는지와 관련된 조건을 스스로 구분할 수 있으면 쉽게 예외를 처리할 수 있습니다.

 

[ try except 구문 ]

  원래 초기의 프로그래밍 언어는 조건문만으로 예외를 처리했습니다. 하지만 예외가 발생할 상황을 예측하고 모두 조건문으로 처리하는 것은 매우 힘든 일입니다. 프로그래밍 언어의 구조적인 문제로 인해 조건문만으로 예외를 처리할 수 없는 경우도 있습니다

  그래서 요즘 프로그래밍 언어는 예외를 처리할 수 있는 구문을 제공합니다. 바로 try except 구문입니다.

try except 구문의 기본적인 구조는 다음과 같습니다.

try:
     예외가 발생할 가능성이 있는 코드
except:
    예외가 발생했을 때 실행할 코드

 

  그럼 이전의 예제를 try except 구문으로 변경해 보겠습니다. 예외가 발생할 가능성이 있는 코드를 모두 try 구문 안에 넣고 예외가 발생했을 때 실행할 코드를 모두 except 구문 안에 넣으면 됩니다. 어떤 상황에 예외가 발생하는지 완벽하게 이해하고 있지 않아도 프로그램이 강제로 죽어 버리는 상황을 막을 수 있습니다.

- 코드를 실행하고 정수로 변환할 수 없는 문자열을 입력해 보세요. 코드를 실행하면 프로그램이 강제로 종료되는 일없이 예외 처리를 하고 정상적으로 종료됩니다.

 

[ try except 구문과 pass ]

  - 프로그래밍을 하다 보면 이유는 정확히 모르겠지만, 어떤 부분에서 예외가 발생하는지 정도는 파악 할 수 있는 상황이 있습니다. 예외가 발생하면 일단 처리해야 하지만, 해당 코드가 딱히 중요한 부분이 아니라면 일단 프로그램이 강제 종료되는 것부터 막자는 목적으로 ecept구문에 아무것도 넣지 않고 try 구문을 사용하게 됩니다.

하지만 구문 내부에 아무 것도 넣지 않으면 구문 오류가 발생하므로 다음과 같이 pass 키워드를 넣어 줍니다.

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

※ try except 구문은 if구문을 활용하는 코드에 비해 아주 약간 느립니다.

 

[ try except else 구문 ]

  try except 구문 뒤에 else 구문을 붙여서 사용하면 '예외가 발생하지 않았을 때 실행할 코드'를 지정할 수 있습니다.

try:
    예외가 발생할 가능성이 있는 코드
except:
    예외가 발생했을 때 실행할 코드
else:
    예외가 발생하지 않았을 때 실행할 코드

※ try except else 구문을 사용할 때는 예외가 발생할 가능성이 있는 코드만 try 구문 내부에 넣고 나머지는 모두 else 구문으로 빼는 경우가 많습니다.


[ finally 구문 ]  

  finally 구문은 예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문입니다. 예외가 발생하든 발생하지 않든 무조건 실행할 때 사용하는 코드입니다.

try:
    예외가 발생할 가능성이 있는 코드
except:
    예외가 발생했을 때 실행할 코드
else:
    예외가 발생하지 않았을 때 실행할 코드
finally:
    무조건 실행할 코드

 

[ try, except finally 구문의 조합]

※ 예외 처리 구문은 다음과 같은 규칙을 지켜야 합니다.

  - try 구문은 단독으로 사용할 수 없으며, 반드시 except 구문 또는 finaly 구문과 함께 사용해야 합니다.

  - else 구문은 반드시 except 구문 뒤에 사용해야 합니다.

① try + except 구문 조합
② try + except + else 구문 조합
③ try + excdept + finally 구문 조합
④ try + except + else + finally 구문 조합
⑤ try + finally 구문 조합
이 외의 조합은 실행했을 때 구문 오류가 발생합니다.

 

Posted by 명문코딩컴퓨터
,