#异常:Python解释器在执行程序时,如果遇到一个错误,就称为一个异常 #抛出异常: 程序执行中止报错,称为抛出异常 #捕获异常:某些代码不能确认是否正常执行,可以来捕获异常 异常的种类: Exception 所有异常的基类,包含所有错误类型 AttributeError 对象没有这个属性 IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类);缩进错误,代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 对类型无效的操作 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 NotImplementedError 尚未实现的方法 StopIteration 迭代器没有更多的值 """
""" 1.简单异常捕获 try: 尝试执行的可能存在异常的代码 except: 异常处理,如果发生异常,执行except的代码,except可以有0个或多个,如果有多个 """ "比如在计算除法中出现为 0 的情况出现异常 " try: 1/0 except ZeroDivisionError as e: print(e.args) """ 2.根据错误类型捕获异常 try: 尝试执行可能存在异常的代码 except 已知异常1: 异常处理 except(已知异常2,已知异常3): 异常处理 """ """ 3.python内置模块.捕获未知错误 开发时没有提前预知的错误被称为未知错误 如果开发过程中,不论出现任何异常而导致程序终止,则可以使用捕获未知错误 语法: try: 尝试执行可能存在异常的代码 except Exception as result: #Exception是python的异常类,包含所有的错误类型;result表示错误类型,使用print可以输出错误信息 print("出现的异常是%s" %result) """ """ 4.异常捕获的完整语法: try: 尝试可能有异常的代码段 except 已知异常1: 异常处理 except (已知异常2,已知异常3): 异常处理 except Exception as result: #捕获未知异常 print("未知异常%s" %result) else: 无异常时执行的代码段 finally: 无论是否有异常都会执行的代码段 """ """ 6.主动抛出异常 除了程序中本来需要捕获的异常外,还可以根据应用需求主动抛出异常 python提供了 Exception 异常类,如果想主动抛出异常: 1.创建一个Exception类的异常对象:EX= Exception() 2.使用raise 抛出异常对象: raise Ex """ "主动抛出异常的例子" def input_passworld(): userpwd= int(input("请输入一个密码:")) if len(userpwd>=8 ): #如果密码大于等于8,返回密码 return userpwd # 如果小于8,则抛出异常 EX= Exception("密码长度不够!!!") # 1.创建异常对象 raise EX # 2.抛出异常对象 try: print(input_passworld()) # 在调用函数方捕获抛出的异常 except Exception as result: print("异常信息%s" %result) """ 7.异常的传递 异常向上传递,会一级一级传递到调用函数,直到主程序 * * * 在主程序中设置异常捕获机制,可以防止程序出错终止 """ def demo1(): func1= input( input("请输入正确的整数")) print("func1") def demo2(): demo1() # 主程序: try: print(demo2()) #在主程序中设置异常捕获机制,可以防止程序出错终止 except Exception as result: print("捕获到的异常为%s" %result)
1. 定义一个异常类,继承Exception基类 2. 使用raise抛出异常类 """ class MyException(Exception): #定义一个异常,继承 Exception异常基类 def __init__(self, msg): self.message = msg def __str__(self): return self.message try: raise MyException('我的异常') #使用 raise 主动触发异常 except MyException as e: print('异常信息:', e)
什么是断言? 在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时 就崩溃,这时候就需要 assert 断言的帮助 python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。 可以理解 assert 断言语句为 raise-if-not,用来测试表示式,其返回值为假,就会触发异常。 断言条件为真时,代码继续执行,负责抛出异常,这个异常通常不会去捕获他,我们设置一个断言目的就 是要求必须实现某个条件。assert True 格式: assert 表达式 #表达式为真,断言成功,不输出任何消息,程序继续执行;表达式为假,断言失败,程序报错终止 断言的应用场景: 1.断言能够帮助别人或未来的你理解代码,找出程序中逻辑不对的地方, 2.一方面,断言会醒你某个对象应该处于何种状态, 3.python内置模块.另一方面,如果某个时候断言为假,会抛出 AssertionError 异常,很有可能终止程序。 4.来测试表示式,其返回值为假,就会触发异常 """ assert 1 == 1 #表达式为真,不输出信息 print('---------------') #assert 1 == 2 #表达式为假,抛出异常 """Traceback (most recent call last): # File "Z:/python_project/day18/ddd/yichang.py", line 26, in <module> # assert 1 == 2 #AssertionError""" def foo(a): assert a==2,Exception("不等于 2") print("ok",a) if __name__ == '__main__': foo(2) #ok 2 foo(1) #AssertionError: 不等于 2