Python 예외 처리


이 문서에는 참조용으로 Python의 일반적인 예외 처리가 다음과 같이 자세히 나와 있습니다.

1. 예외 발생 및 사용자 정의 예외

Python은 오류가 발생한 후 예외가 발생합니다. . 예외 개체가 처리되거나 포착되지 않으면 프로그램은 소위 역추적(오류 메시지)을 통해 실행을 종료합니다.

①.raise 문

Python의 raise 키워드는 예외를 발생시키는 데 사용됩니다. 이는 아래와 같이 기본적으로 C# 및 Java의 throw 키워드와 동일합니다.

# -- coding: utf-8 --

def ThorwErr():
  raise Exception("抛出一个异常")

# Exception: 抛出一个异常
ThorwErr()

raise 키워드는 다음과 같습니다. Throwing은 일반적인 예외 유형(Exception)입니다. 일반적으로 말하면, 던져진 예외가 더 자세할수록 좋습니다. Python에는 예외 유형을 보려면 dir 함수를 사용할 수 있습니다.

import exceptions

# ['ArithmeticError', 'AssertionError'.....]
print dir(exceptions)

예외 전달

예외를 포착했지만 이를 다시 발생시키려는 경우(예외 전달) 매개변수 없이 raise 문을 사용할 수 있습니다.

# -- coding: utf-8 --
class MuffledCalculator:
  muffled = False
  def calc(self,expr):
    try:
      return eval(expr)
    except ZeroDivisionError:
      if self.muffled:
        print 'Division by zero is illegal'
      else:
        raise

②. 사용자 정의 예외 유형

Python에서 자신만의 특별한 유형의 예외를 사용자 정의할 수도 있습니다. Exception 클래스에서 직접 또는 간접적으로 상속하면 됩니다.

class SomeCustomException(Exception):
  pass

2. C#에서는 try/catch와 유사하게 Python에서 다음과 같이 try/exc 키워드를 사용하여 예외를 포착합니다.

# -- coding: utf-8 --

try:
  print 2/0
except ZeroDivisionError:
  print '除数不能为0'

① 여러 예외 포착

Except 문에서는 예외 유형만 선언됩니다. 가능한 경우 이후에 캡처됩니다. 다른 유형의 예외가 발생하는 경우 Except 문을 추가해야 하거나 다음과 같은 보다 일반적인 예외 유형을 지정할 수 있습니다. Exception, 다음과 같이:

# -- coding: utf-8 --
try:
  print 2/'0'
except ZeroDivisionError:
  print '除数不能为0'
except Exception:
  print '其他类型异常'

여러 개의 예외를 선언하는 것 외에도, Except 문 뒤에 여러 개의 예외를 튜플로 나열할 수도 있습니다.

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception):
  print '发生了一个异常'

② 예외 정보 가져오기

각 예외에는 몇 가지 예외 정보가 있습니다. 일반적으로 다음으로 다음 예외 정보를 기록해야 합니다:

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception) as e:
  # unsupported operand type(s) for /: 'int' and 'str'
  print e

3. finally 절

finally 절은 try 절과 함께 사용되지만, Except 문과 달리 finally 절이 있는지 여부는 중요하지 않습니다. try 절 내부에 예외가 있으면 finally 절의 코드가 실행됩니다. 일반적으로 finally 자체는 파일을 닫거나 소켓에서 사용되는 경우가 많습니다.

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception):
  print '发生了一个异常'
finally:
  print '不管是否发生异常都执行'