Python 예외 처리

PythonBeginner
지금 연습하기

소개

속삭이는 숲의 수수께끼 같은 심연 속, 달빛 아래 은빛 망토를 두른 밤, 초보 마법사들 사이에서는 마법 숲 영혼 멘토가 나타났다는 소문이 돌았습니다. 이 찾기 힘든 안내자는 코드의 본질을 제어할 수 있는 뱀과 같은 언어인 Python 에 대한 지식을 가지고 있다고 전해졌습니다. 멘토를 찾는 것은 예외를 잡는 고대 기술을 배우는 것과 같았습니다. 즉, 마법 자체를 멈추지 않고 예측 불가능한 오류의 주문을 처리하도록 코드를 마법처럼 다루는 방법이었습니다.

어느 날 밤, 당신은 에테르 빛으로 반짝이는 잎을 가진 고대 떡갈나무 앞에 서 있습니다. 숲의 심장부인 이곳에서 멘토의 비밀을 배우게 될 것입니다. 당신의 목표는 Python 에서 예외를 잡는 비전 기술을 마스터하여 예상치 못한 일이 발생하더라도 당신의 주문이 깨지지 않도록 하는 것입니다.

잠재적인 저주 식별

이 단계에서는 Python 주문 (코드) 에서 저주 (오류) 가 발생할 수 있는 잠재적인 지점을 식별하는 방법을 배우게 됩니다. 때때로 잘못될 수 있는 간단한 주문을 만들어 시작해 봅시다. 우리는 물약을 더 작은 병으로 나누려고 시도하는 물약 혼합 스크립트를 만들 것입니다. 하지만 현명한 마법사라면 누구든지 0 으로 나누어서는 안 된다는 것을 알고 있습니다.

~/project 내에서 potion_dividing.py라는 파일을 열고 다음 코드를 추가하십시오.

def divide_potions(total_potions, vial_count):
    return total_potions / vial_count

## Attempt to divide 10 potions into 2 vials
print(divide_potions(10, 2))

다음 명령을 사용하여 터미널에서 코드를 실행하십시오.

python ~/project/potion_dividing.py

다음 출력을 볼 수 있습니다.

5.0

이는 물약의 성공적인 분할을 나타냅니다.

이제 potion_dividing.py 스크립트를 수정하여 위험한 주문 사례를 포함하십시오.

print(divide_potions(10, 0))  ## This incantation is dangerous and should be handled!

다음 출력을 볼 수 있습니다.

Traceback (most recent call last):
  File "/home/labex/project/potion_dividing.py", line 6, in <module>
    print(divide_potions(10, 0))
  File "/home/labex/project/potion_dividing.py", line 2, in divide_potions
    return total_potions / vial_count
ZeroDivisionError: division by zero

개선된 스크립트를 실행하면 잡아야 할 저주받은 예외가 표시됩니다. 이 랩에서는 이러한 경우를 우아하게 처리하는 방법을 배우겠습니다.

보호 주문 제작

0 으로 나누는 저주를 경험했으니, tryexcept 절을 사용하여 보호 주문을 만들 차례입니다. potion_dividing.py 스크립트를 업데이트하여 이러한 재앙적인 결과에 대한 안전 장치를 포함하십시오.

def divide_potions(total_potions, vial_count):
    try:
        return total_potions / vial_count
    except ZeroDivisionError:
        return "A sorcerer never divides by zero!"

## Attempt to divide potions safely
print(divide_potions(10, 2))
print(divide_potions(10, 0))  ## This should no longer cause a curse

터미널에서 다음 명령을 사용하여 개선된 스크립트를 다시 실행하십시오.

python ~/project/potion_dividing.py

이제 코드는 예외를 우아하게 처리해야 하며, 오류 대신 경고 메시지를 출력합니다.

5.0
A sorcerer never divides by zero!

요약

이 랩에서는 마법 숲 설정을 통해 Python 예외 (exceptions) 의 어두운 영역을 탐험했습니다. 잠재적인 오류를 식별하는 방법과 주문 흐름을 방해하지 않고 예상치 못한 재앙으로부터 코드를 보호하기 위해 보호 주문 (try/except 블록) 을 소환하는 방법을 탐구했습니다.

여정의 끝에서 우리는 ZeroDivisionError 를 만났을 뿐만 아니라, 그 혼돈을 피하는 기술을 습득하여 코드를 더욱 강력하게 만들고 혼돈의 세력에 의해 방해받을 가능성을 줄였습니다.

코딩 모험을 계속하면서, 마법 숲 영혼 멘토의 말을 기억하십시오: "현명한 마법사는 항상 예상치 못한 것을 예상하고 보호 절로 주문을 보호한다."