Python 예외 발생시키기

PythonBeginner
지금 연습하기

소개

뛰어난 코딩 마법사들의 아카데미인 Arcane Academy of Exceptional Coding 에 오신 것을 환영합니다. 당신은 최근에 이 아카데미에 합류한 젊은 마법사로서, 끊임없이 도전적인 마법 알고리즘과 복잡한 주문의 세계에 발을 들였습니다.

당신의 여정은 뛰어난 문제 해결 능력과 Pythonic 마법에 대한 방대한 지식으로 마법 세계 전역에 알려진, 유명한 경쟁 주문 시전 코치인 Master Pytho 의 지도 아래 시작됩니다. 아카데미에서 모든 마법사는 주문 시전 기술을 배워야 하지만, 진정으로 강력한 마법사를 만드는 것은 예상치 못한 상황을 예측하고 관리하는 능력입니다.

오늘, Master Pytho 는 모든 야심 찬 마법사에게 필수적인 기술인 예외 발생 (Raising Exceptions) 의 고대 기술을 가르칠 것입니다. 이 기술은 마법 (코드) 의 흐름을 제어하고 주문 시전 (프로그래밍) 중에 발생할 수 있는 예기치 않은 오류에 대한 안전 장치를 만들 수 있게 해줍니다.

이 Lab 의 목표는 강력할 뿐만 아니라 탄력적이고 안전한 주문 (프로그램) 을 보장하기 위해 예외를 적절하게 처리하고 발생시킬 수 있는 강력한 Python 코드를 작성할 수 있도록 하는 것입니다. Python 예외 발생 (Raising Exceptions) 의 신비로운 세계를 통과하는 마법 같은 여정을 시작할 준비를 하십시오!

예외의 기본 이해

이 단계에서는 Python 의 예외 (exceptions) 의 기본 사항에 대해 배우게 됩니다. Python 에서 예외는 주문 시전 시퀀스의 흐름을 방해하는 예상치 못한 이벤트와 같습니다. Python 이 오류를 만나면 현재 프로세스를 중단하고 처리될 때까지 호출 스택을 따라 전달합니다. 처리되지 않으면 주문 (프로그램) 이 충돌하고 Python 은 오류 메시지를 출력합니다.

예외가 발생할 수 있는 시나리오를 시뮬레이션하기 위해, 잘못된 주문 (나눗셈 실행) 을 시도하는 간단한 Python 스크립트를 만들 것입니다.

~/project 디렉토리에 spellcasting.py라는 파일을 다음 내용으로 엽니다.

## spellcasting.py

def divide_potions(potions, wizards):
    return potions / wizards

## An attempt to divide potions among zero wizards, which will raise an exception.
divide_potions(10, 0)

다음 명령을 사용하여 주문 시전 스크립트를 실행합니다.

python3 ~/project/spellcasting.py

Python 이 ZeroDivisionError를 발생시키는 것을 확인할 수 있습니다. 다음 단계에서는 이 예외를 적절하게 처리하는 방법을 배우게 됩니다.

Traceback (most recent call last):
  File "/home/labex/project/spellcasting.py", line 7, in <module>
    divide_potions(10, 0)
  File "/home/labex/project/spellcasting.py", line 4, in divide_potions
    return potions / wizards
ZeroDivisionError: division by zero

사용자 정의 예외 발생시키기

이제 더 발전된 주문 시전 기술, 즉 사용자 정의 예외를 발생시키는 단계로 넘어가겠습니다. 이를 통해 사용자 정의 오류 메시지를 생성하고 사용할 수 있으며, 주문을 더욱 유연하고 제어 가능하게 만들 수 있습니다.

이 단계에서는 spellcasting.py 스크립트를 수정하여 divide_potions 함수에 잘못된 수의 마법사가 전달될 때 사용자 정의 Exception을 발생시키도록 하겠습니다.

먼저, spellcasting.py에서 divid_potions 함수를 다음과 같이 수정합니다.

## spellcasting.py

def divide_potions(potions, wizards):
    if wizards == 0:
        raise Exception("Cannot divide potions among zero wizards!")
    return potions / wizards

## Try to divide potions again with intentional error.
divide_potions(20, 0)

변경 사항을 저장한 후, 수정된 스크립트를 다시 실행합니다.

python3 ~/project/spellcasting.py

이번에는 Python 이 사용자 정의 Exception 메시지를 발생시킵니다.

Traceback (most recent call last):
  File "/home/labex/project/spellcasting.py", line 7, in <module>
    divide_potions(20, 0)
  File "/home/labex/project/spellcasting.py", line 3, in divide_potions
    raise Exception("Cannot divide potions among zero wizards!")
Exception: Cannot divide potions among zero wizards!

Try-Except 를 사용한 예외 처리

이 단계에서는 try-except 블록을 사용하여 예외를 우아하게 처리하는 방법을 배우게 됩니다. 주문 (프로그램) 이 오류로부터 복구할 수 있도록 하는 것은 마법사에게 매우 중요한 기술입니다.

spellcasting.py 스크립트에서 divide_potions 함수 호출 주변에 try-except 블록을 추가합니다.

## spellcasting.py

def divide_potions(potions, wizards):
    if wizards == 0:
        raise Exception("Cannot divide potions among zero wizards!")
    return potions / wizards

try:
    ## Try to divide potions and handle potential errors.
    result = divide_potions(30, 0)
    print(f"Each wizard receives {result} potions.")
except Exception as e:
    print(f"Spell failed: {e}")

셸에서 다음을 실행합니다.

python3 ~/project/spellcasting.py

이제 스크립트를 실행하면 충돌하는 대신 다음 출력을 인쇄합니다.

Spell failed: Cannot divide potions among zero wizards!

요약

이 랩에서는 Python 예외 발생 (Raising Exceptions) 의 매혹적인 세계를 탐험했습니다. 자연스럽게 발생하는 예외로 시작하여, 사용자 정의 예외와 메시지를 만드는 방법을 배우고, 마지막으로 주문 (프로그램) 을 깨뜨리지 않고 이러한 예외를 처리하는 기술로 마무리했습니다.

이제 Python 에서 예외를 발생시키고 처리하는 기본 사항을 마스터했습니다. 이는 코딩 마법사로서의 여정에서 분명히 도움이 될 기술입니다. 이는 프로그램의 견고함과 사용자 친화성에 기여할 뿐만 아니라 예상치 못한 동작을 예측하고 대비하는 방법을 가르쳐주어 주문을 완벽하게 만들고 마법사로서의 기량을 강력하게 유지합니다.

젊은 마법사여, 코드가 당신과 함께 하기를 바랍니다.