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
finally 절은 try 절과 함께 사용되지만, Except 문과 달리 finally 절이 있는지 여부는 중요하지 않습니다. try 절 내부에 예외가 있으면 finally 절의 코드가 실행됩니다. 일반적으로 finally 자체는 파일을 닫거나 소켓에서 사용되는 경우가 많습니다.
# -- coding: utf-8 -- try: print 2/'0' except (ZeroDivisionError,Exception): print '发生了一个异常' finally: print '不管是否发生异常都执行'