异常处理

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)

 

以上是关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章

java异常处理详解!!

Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )

Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )

异常处理,约束,MD5加密,日志处理

PHP异常处理

Java的异常处理语法