본문 바로가기
Python/python 기초

Python 기초: 에러 및 예외 처리 – try, except, else

by 철이88 2022. 11. 8.
반응형

코드는 필연적으로 에러나 예외가 발생할 가능성이 있습니다. 이를 대비해서 try, except, else문 등을 이용할 수 있습니다.

1. try/except문


기본적인 try/except 문에서는 다음과 같이 ‘try:’와 ‘except:’ 밑에 들여 쓰기로 실행할 하부 코드 블록을 작성합니다.

(numerator, denominator) = input('Please type any two numbers: ').split()
try:
    division = float(numerator)/float(denominator)
    print('{}/{} equals {}.'.format(numerator, denominator, division))
except:
    print('I cannot divide by {}.'.format(denominator))

설명하자면, try: 밑에 하부 코드가 주목적인데, 

이를 실행하다 에러나 예외가 발생하면, 멈추지 않고 계속 진행하고, except: 아래 코드를 대신 실행합니다.

위의 예제는 두 개의 숫자를 입력 받아(스페이스로 구분), 첫 번째 수를 두 번째 수로 나눠서 출력하는 목적입니다.
만약 사용자가 두번째 수를 0으로 입력하거나, 숫자가 아닌 것을 입력하면 나누기 연산을 할 수 없으니 예외가 발생합니다. 이때 나누기를 할 수 없다는 메시지를 내보내도록 되어있습니다.

2. try/except/else(finally) 문


먼저 다음 예를 보겠습니다. 이 코드는 의도적으로 잘 못 만들어진 예입니다.

(numerator, denominator) = input('Please type any two numbers: ').split()
try:
    division = float(numerator)/float(denominator)
    print('{}/{} equals {}.'.format(numerator, denominator))
except:
    print('I cannot divide by {}.'.format(denominator))

이것을 실행하면 어떤 두 개의 숫자 조합을 입력해도 나눌 수 없다는 메시지를 출력할 것입니다.
이유는 try: 하위 블록의 print() 문이 문제가 있기 때문입니다.
즉, 나누기 연산은 잘 됐지만 출력에서 문제가 있는 것입니다.
그리고 try/except문 때문에 코드는 에러 메시지 없이 진행되고,

코드 작성자는 잘 못된 것을 모를 수 있습니다.

그래서 try 밑에 많은 작업을 시키는 것은 바람직하지 않습니다.

 

이런 점을 생각하면 else나 finally문을 사용하는 것이 좋을 수 있습니다.
else는 에러나 예외가 없을 때, finally는 에러(예외) 유무에 상관없이 실행합니다.

 

다음 예에서는 위의 잘 못된 예에서 try의 두 번째 작업을 else문으로 빼 주었습니다.

(numerator, denominator) = input('Please type any two numbers: ').split()
try:
    division = float(numerator)/float(denominator)
except:
    print('I cannot divide by {}.'.format(denominator))
else:
    print('{}/{} equals {}.'.format(numerator, denominator))

그래서 코드는 try문의 나누기 연산이 문제없을 때 else문을 실행하는데,
print() 문이 잘 못되어 예외가 발생했음을 알리고 코드가 멈춥니다.

 

다음 포스팅은 모듈에 대한 내용입니다.
아래 링크를 참조하세요.

Python 기초: 모듈(module)

 

Python 기초: 모듈(module)

모듈은 변수, 함수, 메소드 등을 포함하는 파일을 의미하며 확장자 .py를 갖습니다. 이번 포스팅은 모듈을 불러들여 사용하는 법을 알아보겠습니다. 1. 모듈 불러오기: import 모듈을 불러오는 법은

er5030000.tistory.com

 

반응형

댓글