一.异常及其处理
异常简介:
在程序运行的过程中会不可避免地出现一些错误,导致程序不继续运行下去
异常后面的代码无法运行,示例如下
print("hello")
print(a)
print("world")
# hello
# NameError: name 'a' is not defined
异常处理:
程序运行的时候出现异常的目的并不是让我们的程序直接终止 ,
python程序希望在运行出现异常的时候,我们编写相应的代码进行处理
因此产生了: try语句等系列语句进行异常处理
try:
代码块(可能出现异常的执行语句)
except:
代码块(出现异常的处理方式)
else:
代码块(没有出现异常的执行语句)
-->异常处理示例如下:
print("hello")
try:
print(a)
except:
print("跳过异常")
else:
print("我是else语句")
print("world")
# hello
# 跳过一场
# world
异常传播
当在函数中出现了异常,如果进行了处理,那么异常不会传播
如果没有进行了处理,那么异常会传播到函数调用处,继而像全局作用域传播
def fn():
print(a)
fn()
# Traceback (most recent call last):
# File "D:/XXX/异常/异常的传播.py", line 7, in XXX
# File "D:/XXX/异常/异常的传播.py", line 6, in XXX
# NameError: name 'a' is not defined
总结: 首先a是没用定义的变量,出现异常,导致函数调用出现了异常
-->函数嵌套使用时的异常传播
def fn():
print(a)
def fn2():
print("我是fn2")
fn()
def fn3():
print("我是fn3")
fn2()
fn3()
//运行结果
我是fn3
我是fn2
# Traceback (most recent call last):
# File "D:/unity3d/异常/异常的传播.py", line 24, in
# File "D:/unity3d/异常/异常的传播.py", line 23, in fn3
# File "D:/unity3d/异常/异常的传播.py", line 19, in fn2
# File "D:/unity3d/异常/异常的传播.py", line 15, in fn
# NameError: name 'a' is not defined
抛异常:
当程序出现异常时,所有的异常会被传递到异常对象中去
而异常的传播时,就是异常对象抛给了调用处
常见异常对象:
ErrorObject:NameError;ZeroDivisionError;KeyError......
更全面的异常处理语句:
try:
代码块(可能出现异常的执行语句)
except:
代码块(出现异常的处理方式)
else:
代码块(没有出现异常的执行语句)
finally:
代码块(前面出不出现异常都会执行的代码)
异常处理示例:
print("开始")
try:
print(10/2) 无异常
print(10/0) 有异常
# except后面不跟内容,则捕获try里面出现的所有异常
# except NameError:
print("出现nameerror")
#except Exception:Exception捕捉try语句里面出现的所有异常对象
except Exception as e:
print("出现异常",e,type(e))
else:
print("继续")
finally:
print("结束")
# 没有异常
# 开始
# 5.0
# 继续
# 结束
# 有异常
# 开始
# 出现异常 division by zero
# 结束