博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异常处理
阅读量:5333 次
发布时间:2019-06-15

本文共 2737 字,大约阅读时间需要 9 分钟。

# 异常分为两种:# 语法异常。# 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):    passtry:    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,其他的逻辑错误应该尽量修正

 

 
 

转载于:https://www.cnblogs.com/wangkaiok/p/10056424.html

你可能感兴趣的文章
直播技术细节3
查看>>
《分布式服务架构:原理、设计于实战》总结
查看>>
java中new一个对象和对象=null有什么区别
查看>>
字母和数字键的键码值(keyCode)
查看>>
协议和代理
查看>>
IE8调用window.open导出EXCEL文件题目
查看>>
sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法(转)...
查看>>
[转]iOS学习笔记(2)--Xcode6.1创建仅xib文件无storyboard的hello world应用
查看>>
Spring mvc初学
查看>>
python标准库学习7
查看>>
有意思的代码片段
查看>>
C8051开发环境
查看>>
VTKMY 3.3 VS 2010 Configuration 配置
查看>>
255. Verify Preorder Sequence in Binary Search Tree
查看>>
01_1_准备ibatis环境
查看>>
windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决
查看>>
[fowarding]Ubuntu jsp平台使用JDBC来连接MySQL数据库
查看>>
蒲公英v5p%n搭建局域网后用nginx做代理的配置
查看>>
函数式编程
查看>>
JavaScript中的BOM和DOM
查看>>