错误: 错误代表的是在运行代码之前就可见(不是指的写代码的人可见,而是指python解释器可见)的问题程序不运行,直接报出错误, 只能在运行前进行修改。
常见错误: SyntaxError: invalid syntax
异常: 程序运行期间遇到了问题, 报出错误在程序运行期间遇到了异常之后,如果异常不被处理或者不能处理,程序会向Python解释器抛出异常,Python解释器如果接收到了异常,那认为程序异常结束(exit code 1)。
异常处理的操作:我们去捕获异常,然后去处理(程序自己去做的)那么Python解释器,就接收不到异常,意味着程序不会异常终止。
常见类型:
ZeroDivisionError
NameError
KeyError
IndexError
语法: 一.异常处理的语法: try: 要执行的语句 #可能出现异常的语句 except: #捕获异常 执行异常处理的语句 上面的语句有省略: 输入:print(111) try: 1 / 0 except (Exception): print("division by zero") print(222) 结果:111 division by zero 222 注意: 例子: ZeroDivisionError 是 ArithmeticError的儿子 ArithmeticError 是 Exception的儿子 假设: ZeroDivisionError他犯了错, 1.它可以自己承担 ZeroDivisionError 2.可以让他的父亲承担 ArithmeticError 3.可以让他的爷爷承担 Exception 如果你遇到了异常,尽量直接使用它自己来承担错误,要精准的捕获异常 二.异常处理的复杂语句 try: 要执行的语句 except ExceptionType1: 处理ExceptionType1的语句 except ExceptionType2: 处理ExceptionType2的语句 except ExceptionType3: 处理ExceptionType3的语句 ...... 例子: try: 1 / 0 list_data = [1, 2, 3] list_data[3] dict_data = {1: 2} dict_data[3] test except IndexError: print("Index") except KeyError: print("Key") except NameError: print("Name") except ZeroDivisionError: print("Zero") 结果: Index 执行的顺序: 1.执行try中的语句,若去执行 1 / 0, 他会抛出一个ZeroDivisionError异常 2.去执行异常捕获,他是顺序去执行: 先去第一个except, 如果可以捕获异常,那么就直接结束了 如果捕获不成功(异常类型不匹配),那么继续去执行下一个except 直到匹配成功(捕获成功), 如果except都不能捕获抛出异常 那么直接抛给Python解释器,程序异常结束 语法格式有什么用途: 1.我们在写代码不能都是可能抛出的语句,所以为了保证程序的健壮性,才这样写。因为我们要确保的是,我们运行程序保证代码轻易报错,所以预知哪些会报错某种操作的时候,只会有一种报错。 三.加else的语法: try: 要执行的语句 except ExceptionType1: 处理ExceptionType1的语句 except ExceptionType2: 处理ExceptionType2的语句 else: 在不抛出任何异常的情况下,去执行的语句 输入: try: print(111) data = 0 except ZeroDivisionError: print("Zero") except IndexError: print("Index") else: print("No Error") 四.主动去抛出异常的语法: raise ExceptionType # 如果后面有需要的话,也可以自定去定义一个异常类型 # 重命名 使用 as 输入: try: 1 / 0 except ZeroDivisionError as zde: print(zde) 结果: division by zero