环境小硕的转行之路-23-异常处理
异常处理
常见的变量代称
1.NameError 变量错误
2.IndexError 列表index错误
3.KeyError 字典的key不存在
4.EOFError iteration到末端
5.FileNotFoundError
6.8ModuleNotFoundError*
7.ValueError 值的类型不匹配
以下的应该在写代码的时候就规避掉
8.SyntaxError 语法错误
9.NameError 变量错误
需要报错的情景以及报错的常见情况
#什么时候最容易出异常:有用户参与的时候,有外界数据介入的时候,从文件里读或从网络上获取.
#当有多行报错的时候,为啥?
'''
# def func1():name
# def func2():
# func1()#最后才报func1()
# def main():
# func2()#第二报func2()
# main()#先报main
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 18, in <module>
main()
File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 17, in main
func2()
File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 15, in func2
func1()
File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 13, in func1
def func1():name
NameError: name 'name' is not defined
'''
except以及多分支
#try 可以只有一个 except可有多个(多分支),多分支合并: 多个error可以放到一个元组再放到一个except下.
# 多分支合并
l = ['login','register']
for num,i in enumerate(l,1):
print(num,i)
try:
num = int(input('num >>>'))
print(l[num - 1])
except (ValueError,IndexError) :
print('您输入的内容不合法')
#万能异常except:(等所有程序开发完了,测试完了才开始用万能异常)
#示例:
def buy():
print('buy')
name#valueerror
def back():
print('back')
[][1]#indexerror
def show():
print('show')
1/0#zerodivisionerror
def main():
l = [('购物',buy),('退货',back),('查看订单',show)]
while True:
for num,i in enumerate(l,1):
print(num,i[0])
num = int(input('num >>>'))#已知可能发生valueerror,可以利用多分支合并到下面的万能异常里面
print(l[num - 1])
try:
# num = int(input('num >>>'))
# print(l[num - 1])
func = l[num - 1][1]
func()
# except (ValueError,IndexError):
# print('您输入的内容不合法')
except Exception as e:#万能异常,应该永远放在最下面.相当于except:但except:取不到信息.
print(e.args,e.__traceback__.tb_lineno,e.__traceback__.tb_frame)#发生了什么异常,在第几行发生的,
print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0])
#
main()
else以及finally分支
#else分支
try:
print('aaa')
name
[][1]
except NameError:
print('name error')
except IndexError:
print('index error')
except Exception as e:
print('exception')
else:
print('else error')#没有异常的时候才执行,如果程序成功了要汇报一句.
finally:
print('finally')#无论如何都会被执行
finally分支
def func():
f = open('file','r')
try:
while True:
for line in f
if line.startswith('a')
return line
except:
print('异常')
finally:#即使报错,程序结束或者return,也会先执行finally中的代码,可以直接和finally去联用.有利地保障资源回收.
f.close()
print('文件已经关闭了')#with open有三个错误处理不了,关闭不了文件.
#finally用于回收一些操作系统的资源:比如文件句柄,网络连接,连接数据库就是借用了操作系统的网卡,
#总结:写一个try: 必须带上except or finally or except+else.
#主动抛出异常 用户输入了你不想让他输入的东西就主动抛异常.
# raise ValueError('你写的不对')#禁止给用户抛异常,给其它开发者用的.django是别人写的程序,是一个框架.
断言以一些注意事项
#断言 新语法
assert 1 == 2#只能接受一个布尔值,False报assertionerror,好比if,就是程序向下执行的先决条件.
print('123132123')
#自定义异常:学完面向对象之后学
#异常处理的忠告:
#程序在没开发完成,禁止在最外层加异常处理.要在经过测试以后再加.
#最后加是为了增强客户体验,应该try:main(0 except exception as f:将错误加到程序里.

浙公网安备 33010602011771号