异常
定义
语法
Try – except-else
"""
try -except-else
try:
代码块
except <错误的名字(可写可不写)>:
代码块
...........
else:
代码块
可以把else去掉
try:
代码块
except <错误的名字(可写可不写)>:
代码块
注意:1.try不能单独使用
2.错误的名字(可写可不写)
运行结果:
报错(除数是0),运行的是except
不报错(除数不是0),运行的是else
"""
try:
s = eval(input("请输入一个数字:"))
a = 10/s
except ZeroDivisionError:
print("除数不能是零")
else:
print("除数是正常的,运行成功")
Try-finally
"""
Try-finally
try:
代码块
finally:
代码块
执行结果:
无论报不报错最终都会执行
"""
#control+c
try:
s= input("请输入内容")
finally:
print("异常退出")
Raise关键字
"""
raise:无论代码是否异常,他自己会触发异常
语法:
raise 异常名称
"""
try:
s = eval(input("请输入一个除数:"))
a = 10/s
#无论你的除数等不等于0,他都会报错
raise ZeroDivisionError
except ZeroDivisionError:
#except是异常的时候给出的警告
print("警告:除数不能为0")
"""
请输入一个除数:3
警告:除数不能为0
"""
常见的异常列表(要求再认)
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
ValueError | 传入无效的参数 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
KeyError | 映射中没有这个键 |
AttributeError | 对象没有这个属性 |
作用域
是按照变量的查找顺序 L>E>G>B
L(local) 局部作用域
"""
L(local) 局部作用域
"""
def func():
#a是函数中的变量,是局部变量,只能在函数中使用
a=10
print(a)
#a是不存在的
print(a)
E(Enclosing) 闭包函数中的作用域
nonlocal :把闭包外的变量引用过来
#刚出生的年龄,是全局变量,意味这谁都是从这个年龄开始的
age = 1
def qunian():
#闭包外的变量,局部变量 4-11能用
age = 19
def jinian():
"""
#把全局变量引用过来,那么就是把age=1引用过来
global age
我们想要引用的是闭包外面的变量
nonlocal :把闭包外的变量引用过来
"""
nonlocal age
#闭包里面的变量 ,局部变量 7-9行能用
age=age +1
print("今年的年龄",age)
print("去年的年龄",age)
return jinian
#qunian()返回的是return jinian
jinian = qunian()
#所以还要调用一下今年这个函数jinian()
jinian()
#今年的年龄 20
G(Global) 全局作用域
global 把全局的age引用过来
"""
G(Global) 全局作用域
"""
#全局
age = 20
def func():
#把全局的age引用过来
global age
#局部
#前面的a相当于是重新赋值的a,是局部的
#后面的a是要进行相加的数据,所以要有这个数据,所以是全局的
age=1 + age
return age
print(func()) #30
B(Built-in) 内建作用域
系统固定模块里面的变量,比如 int, bytearray 等。
比如函数名 abs、char 和异常名称 BaseException、Exception 等等。
总结
是按照变量的查找顺序 L>E>G>B
逐渐扩大范围去寻找