> 백엔드 개발 > 파이썬 튜토리얼 > Python의 오류 처리: 모범 사례. 예외를 효과적으로 처리하는 방법 알아보기

Python의 오류 처리: 모범 사례. 예외를 효과적으로 처리하는 방법 알아보기

Patricia Arquette
풀어 주다: 2025-01-12 22:09:43
원래의
828명이 탐색했습니다.

Error Handling in Python: Best Practices. Explore how to handle exceptions effectively

요약:

프로그램 오류는 복구할 수 없습니다. 프로그램에 오류가 발생하면 즉시 종료되거나 충돌이 발생합니다.

훌륭한 프로그래머는 자신의 코드나 소프트웨어가 충돌이나 바람직하지 않은 결과를 초래하지 않고 소프트웨어 사용 중에 발생할 수 있는 오류/예외를 적절하게 처리할 수 있는지 확인합니다. 숫자 입력만 허용하는 금융 기관용 소프트웨어를 작성한다고 상상해 보십시오. 사용자가 산술 연산을 위해 숫자 대신 문자를 입력하면 일반적으로 오류가 발생하고 소프트웨어에 메커니즘이 없으면 단일 사용자 때문에 충돌이 발생합니다. 오류 단어를 처리하는 장소입니다. 이는 분명히 좋은 일이 아닙니다. 이는 비즈니스에 좋지 않고, 고객을 실망시킬 수 있으며, 무능력으로 인해 누군가가 직장을 잃을 수도 있습니다.

이 글에서는 사용자 상호작용으로 인해 발생할 수 있는 코드 오류를 가장 효과적으로 처리하는 방법을 알아봅니다. 계속 지켜봐 주시기 바랍니다.

전제조건

이 기사는 다음에 적합합니다:

  • 코드에서 예외를 처리하는 방법을 배우려는 Python 소프트웨어 개발자입니다.
  • 이미 Python에 익숙하고 Python의 오류 처리 개념을 배우고 싶은 사람들.
  • Python 오류 처리에 대한 지식을 향상시키려는 기존 전문가.

목표

이 기사를 읽은 후 독자는 다음을 수행할 수 있어야 합니다.

  • Python의 오류 처리 개념과 그 중요성을 명확하게 이해합니다.
  • 사용자 정의 예외 클래스와 이를 구현하는 방법에 대해 알아보세요.
  • Python에서 오류와 예외의 주요 차이점을 이해하세요.

오류 및 예외 설명

오류예외는 종종 같은 의미로 사용되지만 기술적으로는 다른 의미를 갖습니다. Python에서 ErrorException은 모두 BaseException의 하위 클래스입니다. 서로 다르지만 공통점이 있다는 것을 보여줍니다.

오류

오류는 복구할 수 없습니다. 프로그램에 오류가 발생하면 즉시 종료되거나 충돌이 발생합니다. 오류가 예상되더라도 프로그래밍 방식으로 처리할 수 있는 방법은 없습니다. 일부 오류는 다음과 같습니다.

SyntaxError

이것은 프로그래머가 직면하는 가장 일반적인 오류 유형 중 하나이며, 코드가 올바른 Python 구문을 따르지 않을 때 발생하며 구문 분석 중에 감지될 수 있습니다. 이는 학습자나 다른 프로그래밍 언어에서 Python으로 전환하는 사람들에게 쉽게 발생하는 질문입니다.

<code class="language-python">name = “Austin”;
print(name)</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사

Python 명령문이 세미콜론으로 끝나지 않기 때문에 SyntaxError이 발생합니다.

IndentationError

이 오류는 Python 코드의 들여쓰기가 잘못되었을 때 발생하며 코드를 구문 분석할 때 감지됩니다. Python에서는 들여쓰기가 매우 중요합니다. 중괄호를 사용하는 대부분의 언어와 달리 Python에서 코드 블록을 정의할 수 있는 유일한 방법입니다.

<code class="language-python">name = “Austin”;
print(name)</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 코드는 잘못된 들여쓰기로 인해 오류가 발생합니다. 다음과 같아야 합니다.

<code class="language-python">active = True
if (active):
print(“The user is active”)</code>
로그인 후 복사
로그인 후 복사

예외

Python의 예외는 런타임에 발생합니다. 오류와 달리 오류는 프로그래밍 방식으로 적절하게 처리하거나 포착할 수 있으므로 프로그램이 충돌 없이 계속 실행될 수 있습니다. 즉, 복구가 가능합니다. 다음은 Python의 몇 가지 일반적인 예외입니다.

내장된 예외

이러한 유형의 예외는 Python 프로그래밍 언어의 일부입니다. 그 중 일부는 다음과 같습니다.

ValueError

이 오류는 유형이 정확하더라도 유효하지 않은 매개변수가 함수에 전달될 때 발생합니다.

<code class="language-python">if (active):
    print(“The user is active”)</code>
로그인 후 복사
로그인 후 복사

위 코드 조각에서 숫자 문자열을 함수에 전달하면 성공적으로 숫자로 변환되고, 그렇지 않으면 ValueError이 생성됩니다.

<code class="language-python">def str_num(num_string):
    return(int(string))</code>
로그인 후 복사
로그인 후 복사

TypeError

이 오류는 부적절한 유형 매개변수가 함수에 전달될 때 발생합니다.

<code class="language-python">print(str_num(“123”)) #works perfectly
print(str_num(“abc”)) #raises a ValueError</code>
로그인 후 복사
로그인 후 복사

이렇게 하면 TypeError이 실행됩니다.

IndexError

이 오류는 잘못된 인덱스를 사용하여 목록의 값에 액세스하려고 할 때 발생합니다.

<code class="language-python">def addition(num1, num2):
    return num1 + num2
# calling the function
addition(5, A)</code>
로그인 후 복사

IndexError에 액세스할 수 없기 때문에 my_list[2]이 됩니다.

KeyError

이 오류는 올바르지 않거나 존재하지 않는 키를 사용하여 사전의 값에 액세스하려고 시도할 때 발생합니다.

<code class="language-python">my_list = [“dog”, “cat”]
my_list[2]</code>
로그인 후 복사

이렇게 하면 KeyError이 실행됩니다. 여기에서 다른 내장 예외를 찾을 수 있습니다.

사용자 정의 예외

사용자 정의 예외는 프로그래머가 정의합니다. 여기에서 Python을 사용하면 프로그래머는 프로그램이 실행 중에 확인해야 하는 조건을 수동으로 정의하고 발견되면 예외를 발생시킬 수 있습니다. Exception 클래스에서 상속되는 클래스를 생성하면 이를 달성할 수 있습니다.

예외 처리

예외 처리를 통해 애플리케이션 수명 주기 동안 발생하는 특정 오류가 발생할 때 소프트웨어 애플리케이션의 성능을 예측할 수 있습니다. 이번 섹션에서는 프로그래밍에서 이를 구현하는 방법을 배웁니다.

try-except문 사용

try-except 문은 오류나 예외가 발생할 수 있는 코드를 처리하는 안전한 방법을 제공합니다. try 문은 문제가 있는 코드나 try 절을 래핑합니다. 이는 전체 프로그램이 잘못될 가능성이 가장 높은 코드 부분입니다. 이는 사용자로부터 입력을 받을 때, 파일에서 읽을 때 발생할 가능성이 높습니다. 몇 가지 예를 들어보세요.

except 문은 except 절의 시작을 표시합니다. 이는 except 블록으로 묶인 나머지 코드입니다. except 절은 try 블록 내에서 발생한 예외를 처리합니다.

실행 워크플로를 안내해 드리겠습니다. Python 프로그램은 일반적으로 "문제가 있는" 코드가 포함된 try 블록에 도달할 때까지 실행되며, 해당 시점에 try 블록의 코드를 실행하는 동안 오류가 발생하지 않으면 except 블록을 건너뜁니다. 계속해서 나머지 코드 베이스를 실행합니다. 그러나 try 블록에서 코드를 실행하는 동안 오류가 발생하면 예외 개체가 생성된 직후 제어가 일치하는 예외 클래스에서 처리해야 하는 except 블록으로 이동합니다.

<code class="language-python">name = “Austin”;
print(name)</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사

위 코드 조각에서 숫자가 아닌 값이 프로그램에 전달되면 예외 개체가 생성되고 ValueError이 발생합니다. 제어는 즉시 except 블록으로 점프하여 적절한 예외 클래스를 검색합니다. 여기서는 ValueError 클래스로 충분합니다. 오류가 올바르게 처리되었습니다. 그러나 올바른 클래스를 찾지 못하면 제어는 외부 try 블록(있는 경우)으로 이동하고 예외가 여전히 올바르게 처리되지 않으면 프로그램이 중단됩니다.

여러 예외 클래스를 처리하려면 하나의 except 문을 사용하세요

여러 예외 클래스를 확인하고 특정 예외를 처리할 수 있습니다. 여러 예외 중 어떤 것이 코드 실행을 초래했는지 확실하지 않은 경우 이 접근 방식이 선호됩니다. 아래 코드 조각을 참조하세요.

<code class="language-python">active = True
if (active):
print(“The user is active”)</code>
로그인 후 복사
로그인 후 복사

와일드카드 예외 클래스

Exception 클래스는 BaseException의 직접적인 하위 클래스입니다. Exception 클래스는 치명적이지 않은 모든 예외의 기본 클래스입니다.

대부분의 경우 Exception 클래스는 코드 실행 중에 발생하는 대부분의 예외를 처리하는 데 충분합니다.

<code class="language-python">if (active):
    print(“The user is active”)</code>
로그인 후 복사
로그인 후 복사

Exception 클래스가 치명적이지 않은 예외를 처리할 수 있더라도 주의해서 사용하는 것이 가장 좋습니다. 디버깅에 더 좋고 코드 가독성이 향상되므로 올바른 Exception 클래스를 사용하세요.

finally문 사용

finally 블록에 싸인 코드 부분은 예외 발생 여부에 관계없이 실행됩니다. 이는 정리 작업을 처리하고 파일을 닫고 메모리 리소스를 해제하는 데 적합합니다.

<code class="language-python">def str_num(num_string):
    return(int(string))</code>
로그인 후 복사
로그인 후 복사

사용자 정의 예외 클래스 만들기

사용자 정의 예외를 생성하면 프로그래머가 소프트웨어 프로그램에 대한 특정 예외를 발생시킬 수 있습니다. 여기에는 특정 소프트웨어 프로그램의 기능에 해를 끼칠 수 있는 특별한 조건이나 극단적인 경우가 포함될 수 있습니다. 정의된 사용자 정의 예외 클래스는 Exception 클래스에서 상속되어야 합니다.

<code class="language-python">print(str_num(“123”)) #works perfectly
print(str_num(“abc”)) #raises a ValueError</code>
로그인 후 복사
로그인 후 복사

위의 코드 스니펫은 맞춤 예외를 생성하고 사용하는 방법을 보여줍니다. 사용 사례에 따라 더 복잡한 방식으로 사용될 수 있습니다.

오류/예외 처리가 중요한 이유

"사용자를 믿지 말라"는 소프트웨어 개발자들 사이에서 흔히 하는 말인데, 이는 사용자가 어떤 유형의 입력을 입력하고 어떤 내용을 입력할지 완전히 확신할 수 없다는 의미입니다. , 프로그래머는 애플리케이션을 작성할 때 생각하지 못했던 다른 특수한 경우도 있습니다. 적절한 오류/예외 처리에 대한 몇 가지 중요한 이유는 아래에 설명되어 있습니다.

  1. 충돌 방지 예외 처리가 없으면 처리되지 않은 오류로 인해 프로그램이 갑자기 중단될 수 있습니다. 이로 인해 데이터가 손실되거나 사용자 경험이 저하될 수 있습니다. 예: 예외 처리 없음:
print(10 / 0) # ZeroDivisionError: 0으로 나누기

예외 처리 사용:

다음을 시도해보세요: 인쇄(10/0) ZeroDivisionError 제외: print("0으로 나눌 수 없습니다!")

  1. 사용자 경험 개선 적절하게 처리된 예외는 암호 시스템 오류 대신 의미 있는 오류 메시지를 제공하여 응용 프로그램을 더 쉽게 사용할 수 있게 해줍니다. 예:
다음을 시도해보세요: age = int(input("나이를 입력하세요:")) ValueError 제외: print("잘못 입력되었습니다. 숫자를 입력해주세요.")
  1. 애플리케이션 안정성 유지 오류가 발생한 후에도 애플리케이션이 계속 실행될 수 있어 안정성이 보장됩니다. 예:
정의 나누기(a, b): 노력하다: a/b 반환 ZeroDivisionError 제외: return "0으로 나누는 것은 허용되지 않습니다!"

print(divide(10, 2)) # 출력: 5.0 print(divide(10, 0)) # 출력: 0으로 나누는 것은 허용되지 않습니다!

  1. 극한 상황 대처 예외 처리를 사용하면 네트워크 오류, 파일 누락, 잘못된 사용자 입력 등 예측할 수 없는 상황을 처리할 수 있습니다. 예:
다음을 시도해보세요: open("data.txt", "r")을 파일로 사용: 내용 = file.read() FileNotFoundError 제외: print("파일을 찾을 수 없습니다.")
  1. 간단한 코드 작성을 권장합니다
    예외 처리를 사용하면 오류 처리 논리에서 일반 논리를 분리하여 코드를 더 쉽게 읽고 디버그하고 유지 관리할 수 있습니다.

  2. 디버깅 촉진
    자세한 오류 메시지와 예외 로그를 ​​통해 개발자는 코드의 문제를 신속하게 식별하고 수정할 수 있습니다.
    예:

가져오기 로깅

다음을 시도해보세요: 결과=10/0 e와 같은 예외를 제외하고: logging.error("오류가 발생했습니다.", ex_info=True)

  1. 핵심 시스템에 매우 중요 신뢰성이 중요한 시스템(예: 은행, 의료)에서는 데이터 손상이나 손실 없이 오류를 안전하게 관리하기 위해 예외 처리가 필요합니다.

결론

프로그래밍 용어에서 오류와 예외는 대부분 같은 의미로 사용됩니다. Python에서 오류와 예외의 주요 차이점은 해당 오류가 소프트웨어 프로그램에 미치는 영향입니다. 구문 오류 및 들여쓰기 오류와 같은 오류는 인터프리터가 프로그램을 구문 분석할 때 프로그램을 중단시킬 수 있습니다. 반면, 예외가 올바르게 처리되지 않으면 런타임 시 프로그램이 중단될 수 있습니다. 사용자 정의 예외는 프로그래머가 특정 소프트웨어 응용 프로그램에 특정한 예외 클래스를 정의할 수 있도록 하여 오류 처리 기능을 확장합니다.

오류 처리도 디버깅에 매우 중요합니다. 이를 통해 애플리케이션에서 오류가 발생하는 이유를 확인할 수 있으므로 소프트웨어 유지관리자에게 문제를 해결하는 데 충분한 정보를 제공할 수 있습니다. 소프트웨어 애플리케이션의 견고성을 보장하려면 예외 처리가 코드에 적절하게 도입되었는지 항상 확인하십시오.

읽어주셔서 감사합니다.

위 내용은 Python의 오류 처리: 모범 사례. 예외를 효과적으로 처리하는 방법 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿