异常处理
Posted bky88888888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理相关的知识,希望对你有一定的参考价值。
1 ‘‘‘ 2 异常概念: 3 在程序运行期间,总会遇到各种各样的错误,有些错误是程序编写有问题造 4 成的,这种错误我们叫bug,bug是必须修复的。有些错误是用户输入有问题 5 造成的,这种错误可以通过检测用户输入的内容来做相应的处理。还有一些 6 错误是无法在程序运行过程中预测的,比如从网络抓取数据,网络突然中断, 7 这类错误称之为异常,异常在程序运行期间也是必须处理的,否则,程 8 序也会因为这些问题而终止。 9 ‘‘‘ 10 # print("hello wordl") 11 # 程序语法无错误,编译无错误,但结论错误:逻辑异常 --- 必须处理 12 13 # print(10 / 0) # 程序语法无错误,运行出错:运行时错误 --- 必须处理 14 15 # print(num) # 程序语法错误:编译异常 --- 必须处理 16 17 18 # 使用异常:当程序运行时出现错误,不让程序在该位置终止,可以继续进行 19 # 其他操作。 20 ‘‘‘ 21 语法格式: 22 try: 23 语句(预测可能会出现问题的语句) 24 except 错误码1 as e: 25 语句1(错误处理语句) 26 [except 错误码2 as e: 27 语句2(错误处理语句) 28 ... 29 except 错误码n as e: 30 语句n(错误处理语句) 31 ] 32 [else: 33 语句n+1 34 ] 35 注:else:可有可无 36 作用:用来检测try语句中的代码块是否有错误,如果有,让except语句 37 捕获错误信息并处理。 38 逻辑:当程序执行到try…except…else语句时: 39 1、如果try后面的语句在执行时出现异常,python就跳回try语句并 40 执行第一个匹配到该异常的except语句,异常处理完毕后,程序会通过 41 整个try语句(除非在处理异常时又产生新的异常) 42 2、如果try后面的语句在执行时出现异常,但是并没有匹配到except语句, 43 异常将会被提交到最上层的try语句,或者程序的最上层(程序会被终止, 44 并打印错误信息)。 45 3、如果try后面的语句在执行时没有出现异常,python会执行else后面的语 46 句(如果else语句存在的话),然后程序会通过整个try语句向下继续执行。 47 ‘‘‘ 48 ‘‘‘ 49 # 1、能够匹配到异常 50 try: 51 # print(10 / 0) 52 # print(num) 53 print("heloo") 54 except ZeroDivisionError as e: 55 print(e) 56 print("你的代码出问题啦,除数为0啦") 57 except NameError as e: 58 print(e) 59 print("NameError,可能名字出错啦") 60 else: 61 print("异常处理结束啦,可以正常运行啦") 62 63 print("我在程序末尾,快看我") 64 ‘‘‘ 65 # 2、异常匹配失败, 如果匹配失败,程序终止 66 ‘‘‘ 67 try: 68 print(10 / 0) 69 except NameError as e: 70 print("名字错误") 71 72 print("可不可以输出???") 73 ‘‘‘ 74 75 # 3、使用except,但不匹配任何错误,异常能够被正常处理,但异常名称不确定 76 ‘‘‘ 77 try: 78 # print(10 / 0) 79 print(num) 80 except: 81 print("程序异常,能继续执行") 82 print("lalalalal") 83 ‘‘‘ 84 # 4、else语句可有可无 85 ‘‘‘ 86 try: 87 # print(10 / 0) 88 print("123") 89 except ZeroDivisionError as e: 90 print(e) 91 else: 92 print("我是else语句") 93 print(1234567890123) 94 ‘‘‘ 95 # 5、使用except语句一次性匹配多个异常,except后面使用元组格式, 96 # 将可能出现的异常放在一个元组中。 97 ‘‘‘ 98 try: 99 # print(10 / 0) 100 # print(num) 101 li = [0,1] 102 print(li[100]) 103 except (ZeroDivisionError, NameError, KeyError, IndexError): 104 print("ZeroDivisionError, NameError, KeyError") 105 print("-----------------------") 106 107 ‘‘‘ 108 # 6、特殊应用 109 # 6.1、错误其实是class(类),所有的错误都继承于BaseException, 110 # 如果在捕获异常时,如果遇到BaseException这个异常,会将子类全部忽略。 111 # 注:当先匹配到子类的异常,BaseException则被忽略 112 ‘‘‘ 113 try: 114 print(10 / 0) 115 except ZeroDivisionError as e: 116 print("ZeroDivisionError") 117 except BaseException as e: 118 print("BaseException") 119 120 print(‘***************************‘) 121 ‘‘‘ 122 # 注:当先匹配到BaseException的异常,后面写的子类的异常则被忽略 123 ‘‘‘ 124 try: 125 print(10 / 0) 126 except BaseException as e: 127 print("BaseException") 128 except ZeroDivisionError as e: 129 print("ZeroDivisionError") 130 131 print("******************************") 132 ‘‘‘ 133 # 6.2、可以跨越多层捕获的,fun3调用fun2,fun2调用fun1, 134 # 实际上是fun1有问题,但只要是try能够捕获到,就能够处理 135 ‘‘‘ 136 def fun1(): 137 print(10 / 0) 138 def func2(): 139 fun1() 140 def func3(): 141 func2() 142 143 try: 144 func3() 145 except ZeroDivisionError as e: 146 print(e) 147 print(1234567) 148 ‘‘‘ 149 ‘‘‘ 150 try…except...finally 151 语法格式: 152 try: 153 语句(预测可能会出现问题的语句) 154 except 错误码1 as e: 155 语句1(错误处理语句) 156 [except 错误码2 as e: 157 语句2(错误处理语句) 158 ... 159 except 错误码n as e: 160 语句n(错误处理语句) 161 ] 162 [finally: 163 语句n+1 164 ] 165 注:finally:可有可无 166 finally: 无论有没有异常,都会执行(如果有finally语句的话) 167 ‘‘‘ 168 ‘‘‘ 169 try: 170 # print(10 / 0) 171 print(20) 172 except ZeroDivisionError as e: 173 print(e) 174 finally: 175 print("我是finally") 176 print(1234567) 177 ‘‘‘ 178 179 # 断言 180 # 语法格式:assert 参数1, 参数2 181 # 解释: 182 # 第一个参数为判断条件,当条件成立时,代码继续向下执行; 183 # 当条件不成立时,程序直接结束在assert语句,提出AssertionError; 184 # 第二个参数:为错误提示语 185 186 def func666(num1, num2): 187 assert num2 != 0, "你的第二个参数不能为0,而你传了0" 188 print(num1 / num2) 189 func666(10, 2) 190 func666(10, 0)
以上是关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )
Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )