异常处理
# 异常分为两种: # 语法异常。 # name # NameError # if 3 > 2: # print(666) # print(333) # IndentationError # 逻辑异常。 # int(input('>>>')) # l1 = [1, 2, 3] # print(l1[100]) # IndexError # dic = {'name': 'alex'} # print(dic['age']) # KeyError # print(666)
什么是异常?
异常发生之后,代码就不执行了。
参考:https://www.cnblogs.com/jin-xin/articles/9291590.html
# 1,if else...... 对于if语句处理异常只能处理简单的,如果考虑多个条件 不合适。
# try except ...
1、 单支情况。 try except
# 尝试着运行try里面的代码,出现错误,按照错误类型去寻找相应的except,找到执行此except代码,然后程序继续运转。
try: print(111) print(222) print(333) name l1 = [1, 2, 3] print(l1[100]) except NameError: print('name is not defined') print(666)
2、 多支情况。try except except except .... 程序分流
try: print(111) print(222) print(333) name l1 = [1, 2, 3] print(l1[100]) dic = {'name': 'alex'} print(dic['age']) except NameError: print('name is not defined') except IndexError: print('索引超出范围....') except KeyError: print('没有此key...') print(666)
3、 万能处理。 Exception包含了python提供的所有错误类型
小结:
# 万能: 如果你对错误原因不关心,只是想不让其报错,那么程序中你就用万能处理。
# 多分支: 如果你对错误原因需要进行不同分流或者程序处理,那么就需要多分支。
对blog进行修改:
这样有欠缺,我们要实现不同的错误报不同的类型,用多分支。
4、 多分支 加 万能处理。 : 对某些错误需要进行分流处理,剩下的错误直接跳过。
5、try except else
# 如果出现异常 就不会走else逻辑,不出现异常,则执行else逻辑。
try else举例:
出现异常,就不走else程序。也相当于支持事物的回滚。else成功之后才行else
try: print('二狗 向 脸哥转了 200元') name print('脸哥确认收到了 200元') except NameError: print('name is not defined') else: print('转账成功') print(666)
6、try except else finally
# finally 无论报不报错都执行,如果报错,finally是在报错之前执行的!!!
finally举例:文件操作:
# f1 = open('a.log', encoding='utf-8')
# f1.read()
# '''
# 各种对文件操作的代码,但是可能会出错,出错之后,你的文件句柄无法关闭。
# '''
# f1.close()
# finally 会在retrurn之前先执行。
def func(a): try: a += 1 return a finally: print(333) print(func(5))
finally用在哪里: 以后如果遇到关闭连接,数据库连接等等。
7、自定义异常处理(捕捉异常)
# python提供了大部分异常,但是不是所有,比如 大的框架的手机连接问题,网络引发的代码问题等等。
# Exception 也处理不了。
# EOFError
# NameError
# Exception
# 程序中如果出现了python解决不了的异常 比如 PhoneConnectionError
class PhoneConnectionError(BaseException): pass try: raise PhoneConnectionError('类型错误') #raise就是主动抛出一个异常 except PhoneConnectionError: print('手机连接出现问题')
8、断言
# 源码中经常遇到 条件只要不成立,我就抛出错误 assert 1 == 1 #不报错 assert 1 == 2 #报错AssertionError
part9:try..except的方式比较if的方式的好处
try..except这种异常处理机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性
异常处理中为每一个异常定制了异常类型(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性
使用try..except的方式
1:把错误处理和真正的工作分开来
2:代码更易组织,更清晰,复杂的工作任务更容易实现;
3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;
什么时候用异常处理
有的同学会这么想,学完了异常处理后,好强大,我要为我的每一段程序都加上try...except,干毛线去思考它会不会有逻辑错误啊,这样就很好啊,多省脑细胞===》2B青年欢乐多
try...except应该尽量少用,因为它本身就是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的
这种东西加的多了,会导致你的代码可读性变差,只有在有些异常无法预知的情况下,才应该加上try...except,其他的逻辑错误应该尽量修正
作者:wangkaiok —— 小菜鸟111
出处:http://www.cnblogs.com/wangkaiok/
本文版权归作者和博客园共有,但未经作者同意禁止转载,转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。