파이썬에서 오류로 인해 발생하는 예외는 다음과 같습니다.
파이썬의 다양한 예외는 다양한 유형, 즉 예외 식별로 식별할 수 있습니다. 실수.
AttributeError foo.x와 같은 객체가 없는 트리에 액세스하려고 하지만 foo에 속성이 없습니다.
ImportError 모듈이나 패키지를 가져올 수 없거나 기본적으로 경로 문제가 있습니다. name# TypeError:int类型不可迭代 for i in 3: pass # ValueError num=input(">>: ") #输入hello int(num) # NameError aaa # IndexError l=['egon','aa'] l[3] # KeyError dic={'name':'egon'} dic['age'] # AttributeError class Foo:pass Foo.x # ZeroDivisionError:无法完成计算 res1=1/0 res2=1+'str'3. 예외 처리
try: 被检测的代码块 except 异常类型: try中一旦检测到异常,就执行这个位置的逻辑예
try: f = [ 'a', 'a', 'a','a','a', 'a','a',] g = (line.strip() for line in f) #元组推导式 print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) except StopIteration: f.close()
s1 = 'hello' try: int(s1) except IndexError as e: # 未捕获到异常,程序直接报错 print(e)2. 다중 분기 제외..제외 및 보편적 예외: Exception
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) except Exception as e: print(e)
for arg in sys.argv[1:]: try: f = open(arg, 'r') except IOError: print('cannot open', arg) else: print(arg, 'has', len(f.readlines()), 'lines') f.close()4. 예외의 최종 실행 finally
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) #except Exception as e: # print(e) else: print('try内代码块没有异常则执行我') finally: print('无论异常与否,都会执行该模块,通常是进行清理工作')
Python은 raise 문을 사용하여 지정된 예외를 발생시킵니다. raise의 구문 형식은 다음과 같습니다.
raise [Exception [, args [, traceback]]]
try: raise TypeError('抛出异常,类型错误') except Exception as e: print(e)
try: raise NameError('HiThere') except NameError: print('An exception flew by!') raise #An exception flew by! #Traceback (most recent call last): # File "", line 2, in ? #NameError: HiThere5. 사용자 정의 예외 새로운 예외 클래스를 생성하여 자신만의 예외를 가질 수 있습니다. 예외 클래스는 Exception 클래스에서 직접 또는 간접적으로 상속합니다. 예를 들면 다음과 같습니다. 이 예에서는 Exception 클래스의 기본 __init__()가 재정의됩니다.
class EgonException(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg try: raise EgonException('抛出异常,类型错误') except EgonException as e: print(e) #抛出异常,类型错误기본 예외 클래스다양한 예외가 발생할 수 있는 모듈을 생성할 때 일반적인 접근 방식은 이 패키지에 대한 기본 예외 클래스를 생성한 다음 이 기본 클래스를 기반으로 다양한 오류 상황에 대한 다양한 예외를 생성하는 것입니다. :대부분의 예외 이름은 표준 예외 이름 지정과 마찬가지로 "Error"로 끝납니다.
class Error(Exception): """Base class for exceptions in this module.""" pass class InputError(Error): """Exception raised for errors in the input. Attributes: expression -- input expression in which the error occurred message -- explanation of the error """ def __init__(self, expression, message): self.expression = expression self.message = message class TransitionError(Error): """Raised when an operation attempts a state transition that's not allowed. Attributes: previous -- state at beginning of transition next -- attempted new state message -- explanation of why the specific transition is not allowed """ def __init__(self, previous, next, message): self.previous = previous self.next = next self.message = message
assert expression는
if not expression: raise AssertionError
assert expression [, arguments]는
if not expression: raise AssertionError(arguments)와 동일합니다. 다음 예에서는 현재 시스템이 Linux인지 확인합니다. 조건이 충족되지 않으면 직접 트리거됩니다. 예외이므로 다음 코드를 실행할 필요가 없습니다.
import sys assert ('linux' in sys.platform), "该代码只能在 Linux 下执行" # 接下来要执行的代码 # Traceback (most recent call last): # File "C:/PycharmProjects/untitled/run.py", line 2, in # assert ('linux' in sys.platform), "该代码只能在 Linux 下执行" # AssertionError: 该代码只能在 Linux 下执行
위 내용은 Python의 예외 처리 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!