ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1.11. Exception Handling
    번역/Problem Solving with Algorithms and Data 2017. 10. 8. 21:16
    반응형

    이 문서는 영문으로된 내용을 구글 번역기를 활용하여 번역한 내용입니다. 
    개인적인 공부 및 추후 다시 볼 수 있도록 하기 위해 개인 블로그에 번역 내용을 옮겨 놓았습니다.
    원문과 내용이 다를시 책임지지 않으며, 저작권 문제가 발생시 언제든 삭제 될 수 있습니다. 


    Problem Solving with Algorithms and Data Structures using Python by Bradley N. Miller, David L. Ranum is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License


    프로그램을 작성할 때 일반적으로 발생하는 두 가지 유형의 오류가 있습니다. 구문 오류로 알려진 첫 번째 문제는 프로그래머가 구문이나 표현식의 구조를 잘못 이해했음을 의미합니다. 예를 들어 for 문을 작성하고 콜론(:)을 잊어 버리는 것은 잘못되었습니다.

    >>> for i in range(10)
    SyntaxError: invalid syntax (<pyshell#61>, line 1)

    이 경우, 파이썬 인터프리터는 언어의 규칙을 따르지 않기 때문에 이 명령의 처리를 완료 할 수 없다는 것을 발견했습니다. 구문 오류는 일반적으로 언어를 처음 배울 때 더 자주 발생합니다.
    논리 오류라고하는 다른 유형의 오류는 프로그램이 실행되지만 잘못된 결과를 제공하는 상황을 나타냅니다. 이것은 기본 알고리즘의 오류 또는 해당 알고리즘의 번역 오류로 인해 발생할 수 있습니다. 경우에 따라 논리 오류로 인해 0으로 나누거나 목록의 항목 인덱스가 목록의 범위 밖에있는 항목에 액세스하려는 경우와 같은 매우 나쁜 상황이 발생할 수 있습니다. 이 경우 논리 오류로 인해 런타임 오류가 발생하여 프로그램이 종료됩니다. 이러한 유형의 런타임 오류는 일반적으로 예외(exceptions)라고합니다.
    대부분의 경우 초보 프로그래머는 예외가 실행의 원인이되는 치명적인 런타임 오류라고 생각합니다. 그러나 대부분의 프로그래밍 언어는 이러한 오류를 처리 할 수있는 방법을 제공하므로 프로그래머가 원하는 경우 개입 할 수 있습니다. 또한 프로그래머는 프로그램 실행에서 상황을 감지하면 예외를 만들 수 있습니다.
    예외가 발생하면, 우리는 그것이 “raised” 라고 말합니다. try 문을 사용하여 발생한 예외를 "처리"할 수 있습니다. 예를 들어, 사용자에게 정수를 요청한 다음 수학 라이브러리에서 제곱근 함수를 호출하는 다음 세션을 고려해보십시오. 사용자가 0보다 크거나 같은 값을 입력하면 인쇄에 제곱근이 표시됩니다. 그러나 사용자가 음수 값을 입력하면 제곱근 함수가 ValueError 예외를 보고 합니다.
    >>> anumber = int(input("Please enter an integer "))
    Please enter an integer -23
    >>> print(math.sqrt(anumber))
    Traceback (most recent call last):
      File "<pyshell#102>", line 1, in <module>
        print(math.sqrt(anumber))
    ValueError: math domain error
    >>>

    try 블록 내에서 print 함수를 호출하여 이 예외를 처리 할 수 있습니다. 해당 except 블록은 예외를 "catch"하고 예외가 발생하는 경우 사용자에게 메시지를 다시 인쇄합니다. 예를들면 :
    >>> try:
           print(math.sqrt(anumber))
        except:
           print("Bad Value for square root")
           print("Using absolute value instead")
           print(math.sqrt(abs(anumber)))

    Bad Value for square root
    Using absolute value instead
    4.79583152331
    >>>

    예외가 sqrt에 의해 제기된다는 사실을 알아 채고 메시지를 사용자에게 다시 출력하고 절대 값을 사용하여 음이 아닌 숫자의 제곱근을 취하는 지 확인합니다. 즉, 프로그램이 종료되지 않고 대신 다음 문장으로 진행됩니다.
    프로그래머가 raise 문을 사용하여 런타임 예외를 발생시킬 수도 있습니다. 예를 들어 음수로 제곱근 함수를 호출하는 대신 값을 먼저 확인한 다음 자체 예외를 발생시킬 수 있습니다. 아래 코드는 새로운 RuntimeError 예외를 생성 한 결과를 보여줍니다. 프로그램이 여전히 종료되지만 이제는 종료를 야기한 예외는 프로그래머가 명시 적으로 작성한 것입니다.
    >>> if anumber < 0:
    ...    raise RuntimeError("You can't use a negative number")
    ... else:
    ...    print(math.sqrt(anumber))
    ...
    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
    RuntimeError: You can't use a negative number
    >>>


    위에 표시된 RuntimeError 이외에 발생할 수있는 많은 종류의 예외가 있습니다. 사용 가능한 모든 예외 유형 목록과 자신 만의 예외 유형을 만드는 방법은 Python 참조 설명서를 참조하십시오.

    반응형
Designed by Tistory.