• Home
  • About
    • Ryureka Moment photo

      Ryureka

      Sin Prisa, Sin Pausa

    • About Me
    • Facebook
    • Github
    • Youtube
  • Projects
  • Posts
    • Posts
    • ProblemSolvings
    • Tags
    • Blog
    • TIL
    • Examples
  • ProblemSolving
    • ProblemSolving
    • BruteForce
    • DFS
    • DP
    • Optimization
  • FrontEnd
    • FrontEnd
    • HTML
  • BackEnd
    • BackEnd
    • Spring
    • Node.js
    • DataBase
      • MySQL
  • Programming
    • Programming
    • Java
    • Python
  • ComputerScience
    • DataStructure
    • Algorithm

[파이썬 기초 문법] 14장. 예외처리

21 Jun 2019

Reading time ~3 minutes

이 포스트는 윤성우님의 저서 열혈 파이썬 기초편을 기반으로 작성한 글입니다.
  • 윤성우 열혈 파이썬 기초편
    • 14장. 예외처리
      • 1.예외가 발생하는 상황
      • 2.예외의 처리
      • 3.보다 적극적인 예외의 처리
      • 4.둘 이상의 예외를 처리하기
      • 5.예외 메시지 출력하기와 finally
      • 6.모든 예외 그냥 무시하기

윤성우 열혈 파이썬 기초편

14장. 예외처리

1.예외가 발생하는 상황

>>> lst = [1, 2, 3]
>>> lst[3]
Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    lst[3]
IndexError: list index out of range

위와 같이 인덱스를 벗어나서 참조하면 IndexError가 발생한다.

>>> 3 + "coffee"
Traceback (most recent call last):
  File "<pyshell#41>", line 1, in <module>
    3 + "coffee"
TypeError: unsupported operand type(s) for +: 'int' and 'str'

위와 같이 다른 타입의 데이터를 연산하면 TypeError가 발생한다.

>>> 3 / 0
Traceback (most recent call last):
  File "<pyshell#42>", line 1, in <module>
    3 / 0
ZeroDivisionError: division by zero

위와 같이 0으로 나누는 연산을 하면 ZeroDivisionError가 발생한다.

2.예외의 처리

# age.py
def main():
	print("안녕하세요.")
	age = int(input("나이를 입력하세요: "))
	print("입력하신 나이는 다음과 같습니다:", age)
	print("만나서 반가웠습니다.")

main()

'''
안녕하세요.
나이를 입력하세요: 스물
'''
Traceback (most recent call last):
  File "age.py", line 9, in <module>
    main()
  File "age.py", line 5, in main
    age = int(input("나이를 입력하세요: "))
ValueError: invalid literal for int() with base 10: '스물'

age_expt.py

def main():
	print("안녕하세요.")
	try:
		age = int(input("나이를 입력하세요: "))
		print("입력하신 나이는 다음과 같습니다:", age)
	except ValueError:
		print("입력이 잘못되었습니다.")

	print("만나서 반가웠습니다.")

main()

'''
안녕하세요.
나이를 입력하세요: 서른
입력이 잘못되었습니다.
만나서 반가웠습니다.
'''

3.보다 적극적인 예외의 처리

age_expt_conti.py

def main():
	print("안녕하세요.")
	while True:
		try:
			age = int(input("나이를 입력하세요: "))
			print("입력하신 나이는 다음과 같습니다:", age)
			break 	   # 입력이 정상적이면 while 루프 탈출!
		except ValueError:
			print("입력이 잘못되었습니다.")
	print("만나서 반가웠습니다.")

main()
'''
안녕하세요.
나이를 입력하세요: 스물
입력이 잘못되었습니다.
나이를 입력하세요: 20
입력하신 나이는 다음과 같습니다: 20
만나서 반가웠습니다.
'''

4.둘 이상의 예외를 처리하기

div_expt2.py

def main():
	bread = 10     # 열 개의 빵
	try:
		people = int(input("몇 명? "))
		print("1인당 빵의 수: ", bread / people)
		print("맛있게 드세요.")
	except ValueError:
		print("입력이 잘못되었습니다.")
	except ZeroDivisionError:
		print("0으로는 나눌 수 없습니다.")

main()
'''
몇 명? 0
0으로는 나눌 수 없습니다.
'''

5.예외 메시지 출력하기와 finally

div_expt3.py

def main():
	bread = 10       # 열 개의 빵
	try:
		people = int(input("몇 명? "))
		print("1인당 빵의 수: ", bread / people)
		print("맛있게 드세요.")
	except ValueError as msg: 		# 변수 msg에 오류 메시지가 담긴다.
		print("입력이 잘못되었습니다.")
		print(msg) # 오류 메시지 출력
	except ZeroDivisionError as msg: 	  # 변수 msg에 오류 메시지가 담긴다.
		print("0으로는 나눌 수 없습니다.")
		print(msg) # 오류 메시지 출력

main()
'''
몇 명? 0
0으로는 나눌 수 없습니다.
division by zero
'''

div_expt4.py

def main():
	bread = 10      # 열 개의 빵
	try:
		people = int(input("몇 명? "))
		print("1인당 빵의 수: ", bread / people)
		print("맛있게 드세요.")
	except ValueError:
		print("입력이 잘못되었습니다.")
	finally:
		print("어쨌든 프로그램은 종료합니다.")

main()
'''
몇 명? 0
어쨌든 프로그램은 종료합니다.
'''
Traceback (most recent call last):
File "div_expt4.py", line 15, in <module>
main()
File "div_expt4.py", line 8, in main
print("1인당 빵의 수: ", bread / people)
ZeroDivisionError: division by zero

6.모든 예외 그냥 무시하기

ignore_expt.py

def main():
	bread = 10     # 열 개의 빵
	try:
		people = int(input("몇 명? "))
		print("1인당 빵의 수: ", bread / people)
		print("맛있게 드세요.")
	except: 		# 이렇게 하면 모든 예외가 다 걸려든다.
		print("뭔지는 몰라도 예외가 발생했군요.")

main()

'''
몇 명? 글쎄요
뭔지는 몰라도 예외가 발생했군요.
'''


Python Share