首页 > 代码库 > python-异常处理
python-异常处理
一、异常
异常是什么?
就是影响程序正常执行的事件,异常在程序执行的过程中发生,脚本发生异常时,我们需要捕获它,否则程序就会终止。
异常处理:
1、捕获异常:try:。。。except 。。。。。
1 while True: 2 try: 3 num1=input(‘>>:‘) 4 num2 = input(‘>>:‘) 5 num1=int(num1) # 出错,不再往下执行try里面的代码块, 直接进入except 6 num2 = int(num2) 7 num=num1+num2 8 print(num) 9 except Exception as e: 10 print(e) #捕获错误信息 程序重新执行
2、复杂的异常处理结构:
try:
代码块1
except:
代码块2
else:
代码块3
finally:
代码块4
不出异常:1-3-4
出异常:1-2-4
3、异常种类
Exception可以捕获所有的异常
常用的其他异常
1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异常;基本上是无法打开文件 3 ImportError 无法引入模块或包;基本上是路径问题或名称错误 4 IndentationError 语法错误(的子类) ;代码没有正确对齐 5 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] 6 KeyError 试图访问字典里不存在的键 7 KeyboardInterrupt Ctrl+C被按下 8 NameError 使用一个还未被赋予对象的变量 9 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) 10 TypeError 传入对象类型与要求的不符合 11 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 12 导致你以为正在访问它 13 ValueError 传入一个调用者不期望的值,即使值的类型是正确的
对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行
1 s1 = ‘hello‘ 2 try: 3 int(s1) 4 except IndexError as e: 5 print e 6 except KeyError as e: 7 print e 8 except ValueError as e: 9 print e 10 except Exception as e: 11 print e
主动触发异常
raise ..............
1 while True: 2 try: 3 num1=input(‘>>:‘) 4 num2 = input(‘>>:‘) 5 num1=int(num1) 6 num2 = int(num2) 7 num=num1+num2 8 print(num) 9 raise Exception(‘eeeeeeeeeerrrrrrrrrrrrrrSSSSSSSS‘) #主动触发异常 10 except Exception as e: 11 print(e) # 打印出 eeeeeeeeeerrrrrrrrrrrrrrSSSSSSSS
断言: assert 条件
1 print(1) 2 assert 1==1 3 print(2) 4 ‘‘‘输出:1 5 2 6 ‘‘‘
二、反射
1、允许用户输入 不同的url:
account/login
account/logout
home/index
home/order
2、看到不同的结果
3、输入不存在的url,曝404错误
url列表=[account/login,account/logout,home/index,home/order]
以上url的函数均保存在controller下的account脚本中
‘‘‘
inp=input(‘请输入url‘)
m,n=inp.split(‘/‘) #m=account n=login
去某个模块中找函数,如果函数存在就执行函数,如果不存在函数就报错
getattr() #专门用来去某个地方获取内部的东西 (以字符串的形式获取)
1 from controller import account #以上url的函数均保存在controller下的account脚本中 2 3 h=hasattr(account,‘login1‘) #去account模块(脚本)中,是否存在login函数 4 print(h) # 存在返回true 不存在返回false 5 getattr(account,‘login‘)# 去account模块(脚本)中获取login函数 6 7 setattr(account,‘login1‘,‘ddd‘) #去account模块(脚本)中添加login1函数 8 h=hasattr(account,‘login1‘) #再次判断是否存在login1属性 9 print(h) #返回true 10 11 delattr(account,‘login1‘) #去account模块(脚本)中删除login1函数 12 h=hasattr(account,‘login1‘) #再次判断是否存在login1属性 13 print(h) #返回false
hasattr(容器,‘名称‘) 以字符串的形式判断某对象中是否含有指定的属性
getattr(容器,‘名称‘) 以字符串的形式去某个对象中获得指定的属性
setattr(容器,‘名称‘,值) 以字符串的形式去某个对象中设置指定的属性
delattr(容器,‘名称‘) 以字符串的形式去某个对象中删除指定的属性
python-异常处理