Python Try Except는 Python에서 충돌 없이 예외를 정상적으로 처리하기 위해 사용되는 구성입니다.
예외 처리를 통해 프로그램 코드의 안정성이 향상되고 실패 가능성이 줄어듭니다. 이 문서에서는 예외 처리와 예외 처리가 이상적인 일반적인 시나리오를 안내합니다. 보너스로 예외를 발생시키는 방법도 다룰 것입니다.
목차
예외 처리란 무엇입니까?
예외는 프로그램 실행 중에 발생하는 중요한 예외 사항 및 오류입니다. 처리되지 않으면 예외로 인해 프로그램이 중단됩니다. 따라서 예외 처리는 예외로 인해 프로그램이 중단되지 않도록 하는 방법입니다.
다음은 예외가 무엇인지 설명하는 예입니다.
user_input = input("Enter a number: ") num = int(user_input) print("Your number doubled is:", num * 2)
언뜻 보면 위 프로그램에는 아무런 문제가 없어 보입니다. 사용자로부터 입력을 받아 정수로 변환합니다. 다음으로 사용자가 제공한 정수를 두 배로 표시합니다.
입력값 5로 실행하면 프로그램이 제대로 실행됩니다. 아래를 참조하세요.
하지만 동일한 프로그램을 다시 실행했다고 가정해 보겠습니다. 이번에는 5를 입력으로 사용하는 대신 “hello” 문자열을 입력합니다. 프로그램이 충돌합니다. 문자열 “hello”는 정수로 변환될 수 없으므로 예외가 발생하고 프로그램이 충돌합니다.
예외가 발생하는 이유와 예외를 처리해야 하는 이유는 무엇입니까?
프로그램을 코딩할 때 프로그램을 함수로 분해하는 경우가 많기 때문에 예외가 발생합니다. 그런 다음 이러한 함수는 다양한 작업을 수행하기 위해 호출됩니다.
위의 예에서는 입력 함수를 호출하여 사용자의 입력을 받은 다음 int 함수를 호출하여 문자열 입력을 정수로 변환하고 마지막으로 print 함수를 호출하여 일부 출력을 표시했습니다.
그러나 함수가 작업을 수행할 때 처리 방법을 모르는 오류가 발생할 수 있습니다. 이 경우 해당 기능은 실행을 중지하고 오류가 발생했음을 전달해야 합니다. 통신하기 위해 예외가 발생합니다.
함수라고 불리는 코드는 이러한 예외를 수신하고 적절하게 반응하는 역할을 담당합니다. 그렇지 않으면 이전 예제에서 본 것처럼 오류가 발생한 후 프로그램이 중단됩니다.
따라서 예외는 본질적으로 호출된 함수가 이를 호출한 코드에 조난 신호를 보낼 수 있도록 하는 통신 메커니즘입니다. 앞서 적절하게 언급한 반응이 예외 처리의 핵심입니다.
다양한 종류의 예외
모든 예외가 동일한 것은 아니라는 점을 아는 것이 중요합니다. 발생한 다양한 오류에 대해 다양한 종류의 예외가 발생합니다. 예를 들어 숫자를 0으로 나누려고 하면 ZeroDivisionError가 발생합니다. 그리고 잘못된 데이터 유형으로 작업을 시도하면 TypeError가 발생합니다. 다음은 전체 목록입니다. 예외 유형.
예외를 처리하는 방법
앞서 설명했듯이 예외는 우리가 호출하는 함수에 의해 발생하는 조난 신호입니다. 따라서 우리 코드는 이러한 조난 신호를 듣고 신호가 울릴 때 적절하게 반응해야 합니다. 예외를 적절하게 처리하기 위해 Python Try Except 구문을 사용합니다. 구성의 기본 구조는 다음과 같습니다.
try: # Code to try and run except: # Code to run if an exception is raised finally: # Code to run in the end, whether or not an exception is raised
보시다시피 구성은 아래에 설명된 세 가지 키워드로 구성됩니다.
노력하다
try 키워드는 Python Try Except 구문의 시작을 표시합니다. 또한 잠재적으로 예외가 발생할 수 있는 코드 블록을 표시합니다. 블록에서 코드를 실행하라는 Python 인터프리터에 대한 명령입니다. 예외가 발생하면 프로그램은 즉시 중지되고 점프하여 제외 블록 안에 작성된 코드를 실행합니다.
제외하고
Except 키워드는 try 블록을 실행하는 동안 예외가 발생하는 경우 실행될 코드 블록을 표시합니다. 발생할 수 있는 다양한 유형의 예외에 대해 여러 개의 제외 블록을 정의할 수 있습니다. 이에 대해서는 나중에 설명하겠습니다.
마지막으로
finally 키워드는 Python Try Except에서 사용되는 세 번째이자 마지막 키워드입니다. 예외 발생 여부에 관계없이 실행될 코드 블록을 표시합니다.
예
다음은 위의 키워드가 예외를 처리하는 방법에 대한 예입니다. 이전 예제를 이에 맞게 수정하겠습니다.
try: user_input = input("Enter a number: ") num = int(user_input) print("Your number doubled is:", num * 2) except: print("Something went wrong") finally: print("This code will be executed no matter what")
유효한 입력인 5를 입력으로 사용하여 위 코드를 실행하면 다음과 같은 결과를 얻게 됩니다.
그리고 “hello”를 입력으로 사용하여 실행하면 다음과 같은 결과를 얻게 됩니다.
따라서 try 블록에서 코드를 실행하는 동안 예외가 발생하지 않으면 컴퓨터는 finally 블록으로 이동했습니다. 그러나 try 블록의 코드를 실행하는 동안 예외가 발생하면 컴퓨터는 Except 블록으로 이동한 다음 finally 블록으로 이동했습니다.
특정 종류의 오류에 대한 예외를 처리할 수도 있습니다. 예를 들어 ValueError 및 KeyboardInterrupt 예외를 특정 방식으로 처리하려면 위 코드를 다음과 같이 수정할 수 있습니다.
try: user_input = input("Enter a number: ") num = int(user_input) print("Your number doubled is:", num * 2) except ValueError: print("Value can't be converted to int") except KeyboardInterrupt: print("Received a keyboard interrupt") except: print("Catch-all exception block") finally: print("This code will be executed no matter what")
위 코드에는 3개의 Except 블록이 있습니다. 첫 번째 제외 블록은 ValueError 예외만 포착하는 반면, 두 번째 제외 블록은 KeyboardInterrupt 예외만 포착합니다. 마지막 제외 블록에는 수신할 관련 예외 유형이 없습니다. 결과적으로 처음 두 블록에서 포착되지 않은 나머지 예외를 포착합니다.
위의 코드를 실행하면 다음과 유사한 출력이 표시됩니다.
예외가 발생하면 예외 개체에서 예외에 대한 자세한 정보를 얻을 수 있습니다. 예외 개체에 액세스하려면 as 키워드를 사용합니다. 다음과 같이 사용됩니다:
try: user_input = input("Enter a number: ") num = int(user_input) print("Your number doubled is:", num * 2) except ValueError as e: print("Value Error:", e) except KeyboardInterrupt as e: print("Keyboard Interrupt:", e) except Exception as e: print("Some other exception", e)
예외를 발생시키는 방법
지금까지 우리는 다른 함수에서 발생한 예외를 처리해 왔습니다. 그러나 코드에서 예외를 발생시키는 것도 가능합니다. 예외를 발생시키려면 raise 키워드를 사용합니다. 또한 발생시키려는 예외 유형과 예외와 관련된 사람이 읽을 수 있는 메시지를 나타내는 클래스도 지정합니다.
다음 예제에서는 Exception 클래스를 사용하여 일반 예외를 발생시킵니다. 다음으로 메시지를 클래스 생성자에 전달합니다.
raise Exception('Something went wrong')
위의 코드 조각을 프로그램으로 실행하면 다음과 유사한 출력이 표시됩니다.
다양한 종류의 예외를 지정할 수도 있습니다. 예를 들어, 값의 데이터 유형이 잘못된 경우 TypeError 예외를 발생시킬 수 있습니다.
def double(x): if isinstance(x, int): return x * 2 else raise TypeError('x should be an int')
또는 지정된 값이 허용 가능한 범위를 벗어나면 ValueError를 발생시킬 수 있습니다.
def say_hello(name): if name == '': raise ValueError('Value outside bounds') else: print('Hello', name)
Exception 클래스를 서브클래싱하여 예외 유형을 생성할 수도 있습니다. 예는 다음과 같습니다.
class InvalidHTTPMethod(Exception): pass
위의 예에서는 Exception 클래스에서 상속되는 InvalidHTTPMethod 클래스를 만들었습니다. 예외를 발생시키기 위해 이전과 같은 방식으로 사용할 수 있습니다.
raise InvalidHTTPMethod('Must be GET or POST')
예외 처리의 일반적인 사용 사례
예외 처리는 많은 시나리오에서 사용됩니다. 이전 예제에서는 사용자 입력으로 인한 예외를 처리하는 방법을 보여주었습니다. 이 섹션에서는 예외 처리가 유용한 두 가지 추가 상황을 다룹니다. 이는 실패한 네트워크 요청의 결과로 발생하는 예외를 처리하고 파일을 읽는 동안 예외를 처리하는 것입니다.
네트워크 요청하기
아래 예에서는 Google에 요청하고 있습니다. 우리는 이를 처리하기 위해 예외를 수신하고 있습니다. 이러한 예외는 요청.예외 개체에 정의되어 있습니다.
import requests try: response = requests.get("https://google.com") # Check if the response status code is in the 200-299 range (successful response) if 200 <= response.status_code < 300: print("Request was successful!") else: print(f"Request failed with status code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"RequestException occurred: {e}") except requests.exceptions.ConnectionError as e: print(f"ConnectionError occurred: {e}") except requests.exceptions.Timeout as e: print(f"Timeout occurred: {e}") except requests.exceptions.TooManyRedirects as e: print(f"TooManyRedirects occurred: {e}") except requests.exceptions.HTTPError as e: print(f"HTTPError occurred: {e}") except Exception as e: print(f"An unexpected error occurred: {e}")
파일에서 데이터 읽기
이 마지막 예에서는 hello.txt 파일에서 데이터를 읽습니다. 또한 FileNotFound 오류 및 IOError와 같이 발생할 수 있는 일반적인 예외도 처리하고 있습니다.
try: with open(file_path, 'r') as file: data = file.read() print("File contents:") print(data) except FileNotFoundError as e: print(f"FileNotFoundError occurred: {e}") except IOError as e: print(f"IOError occurred: {e}") except Exception as e: print(f"An unexpected error occurred: {e}")
결론
이 기사에서는 예외가 무엇이고 왜 발생하는지 살펴보았습니다. 또한 코드를 보다 안정적으로 만들고 충돌을 방지하기 위해 이를 처리한다는 사실도 확인했습니다. 마지막으로 예외를 처리하는 방법과 일부 예외를 발생시키는 방법을 다루었습니다.
다음으로 일반적인 Python 오류 유형과 해결 방법을 확인하세요.