오류의 종류
코드를 작성하고 실행하다 보면
작은 실수들로 인해 오류가 발생하는
일이 있는데
이와 같은 오류는 크게 두 가지
타입으로 나눌 수 있다.
하나는 Syntax Error,
즉 구문 오류이고
다른 한 가지는 runtime error,
통칭 예외(exception)라는 오류인데
Syntax Error를 제외한 모든 에러는
바로 이 exeption인 것이다.
Syntax Error는
코드의 구문에 문제가 있을 때 발생하는
에러로, 오류가 발견된 줄의 해당 코드만
실행이 안 되는 것이 아닌 그 위쪽에 있는
정상적으로 작성된 코드까지 포함
전체적으로 실행이 안 된다는 특징이 있다.
예제에서 보면 알 수 있듯이
구문에 오류가 있는 코드가
있을 경우
문제가 없는 코드 또한
실행이 되지 않음을 볼 수 있다.
Runtime Error는
코드 자체에 문법적인 오류는 없지만
실행과 관련된 문제가 있을 때 발생한다.
실행은 되지만 실행 과정 중에 어떤 오류가
발생해 프로그램이 다운되는 현상이다.
syntaxError와는 다르게
문제가 있는 코드 전에 있는
정상적인 코드들은 실행이 된다.
문제를 만나기 전의
코드가 실행되었음을 볼 수 있다.
알아두어야 할 사항
SyntaxError의 경우 특성상
프로그램 시행전에 문제 되는
부분을 수정하여 오류를
잡아줄 수 있지만
exeption의 경우는
어느 부분에서 예외가 발생할 수
있겠다는 것을 미리 예측하여
예외가 발생하지 않도록 미리
처리를 해주어야 한다.
이게 말이 쉽지만 실제로는
예상치 못한 오류로 인해 프로그램이
튕기고 꺼지고 죽어버리는 현상이
빈번하게 일어나며 접속자 수의
증가에 따라 서버가 다운 돼버리는 등의
여러 오류 변수들이 있을 수 있는데
이와 같은 현상들이 일어나는 이유가
바로 예외(exeption)에 대응하지 못했기
때문이다.
예외라는 부분이 어디서 어떻게 터질지
모르기 때문에 중요한 행사나 이벤트를
앞두고 있는 날은 개발자들이 언제든
긴급 대응을 하기 위해 대기하고 있는
경우도 많다고 한다.
프로그램을 직접 작성할 때 만나는
오류들의 원인을 파악하고 분석하여
알아두고 정리해 나가는 습관이
필요하고 중요하다고 한다.
기본 예외 처리
예외 처리가 필요한 예를 한번 보자.
사용자 입력을 받는 입력란에
정수만 들어올 수 있게끔 int 타입으로
input 함수를 감싸주었는데
사용자가 문자를 입력하자
에러가 나버렸다.
문자 외 소수점 실수를 넣는다 해도
동일한 에러가 날 텐데 이처럼 사용자가
개발자가 의도하지 않는 변숫값을
입력할 수 있다는 부분을 미리 예측하면
이러한 부분을 에러로 처리되지 않도록
하는 우회 코드를 작성할 수 있을 것이다.
동일한 상황에서 가장 기본적으로
생각해 볼 수 있는 해결법은 바로
정수를 입력하지 않으면 정수를 입력해
달라는 메시지를 띄우는 방법이 있겠다.
조건문을 입력해 이를 작성해 보자
정수가 아닌 경우를 else에
추가해 주었다. 그럼 한번
문자를 입력해 보자!
error 메시지가 뜨지 않고
미리 정해둔 메시지를 받고
오류 없이 프로그램이 종료됨을
볼 수 있다.
하지만 무언가 부족하다.
이번엔 사용자가 실수를 하더라고
프로그램을 종료시키지 말고
정수를 넣는 경우에만 프로그램이
종료되도록 만들어 주자.
while 조건문을 만들고
break로 제한을 걸어준다.
이처럼
오류가 발생해도 프로그램이
죽어버리지 않게 미리 상황을
예측하고
그에 맞는 대응, 미리 조건문 등을
활용하는 등의 처리를 해두는 것을
기본 예외 처리라고 한다.
try / except
이 키워드는
위와 같은 예외를 처리하는
전용 구문으로
자바 등 다른 프로그래밍 언어에서는
try catch문 이라고 부르며 파이썬
에서는 이를 try except로 부른다.
예측 가능한 예외 등의 오류는
조건문 등을 사용해 미리 처리할 수
있지만 어떤 예외가 발생할지를
모두 예측하기에는 불가능한 일이고,
프로그래밍 언어의 구조적 문제로 인해
조건문으로 처리하기 힘든 예외도 있다.
그와 같은 예외 처리를 목적으로
제공하는 구문이 바로 try 와 except다.
굉장히 빈번하게 사용되니
잘 알아두자.
기본 형태
try:
#예외가 발생할 수 있는 코드
except :
#예외가 발생했을 때 실행할 코드
프로그램을 종료시키지 말고
계속 입력을 받고 싶다면
while break를 사용해서
이자나기!
except에 pass 키워드를 넣어
프로그램만 죽지 않도록 해 줄 수
있으니 상황에 맞게 골라 쓰자!
반복문에서 try exept 사용 예시
float(number)를 활용해
number가 숫자로 변환될 수 있는지
확인을 하고 변환되면 리스트에 담고
변환되지 않으면 예외가 발생,
except로 가 pass를 만나면
아무것도 하지 않고 다시 과정을
반복하게 된다.
똑같은 결과를 내는
if 문과 try 코드 비교
'프로그래밍 > Python' 카테고리의 다른 글
기초) Class와 객체지향 프로그램 (0) | 2020.06.04 |
---|---|
기초) 예외 처리 추가 (0) | 2020.06.02 |
기초) 제너레이터 , yield 정리 및 문제 풀기 (0) | 2020.06.01 |
기초) 텍스트 파일 처리 기본 (1) | 2020.05.31 |
기초) 람다 / map & filter 함수 (0) | 2020.05.30 |