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

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

异常处理

程序运行过程中有时间会遇到一些错误,比如调用一些没有定义的方法、变量或者有些验证不严格,传入到后台会报各种各样的错误。那么显示这些错误信息对用户来说是不友好的。

在Python中有一套异常处理机制来帮助我们进行错误处理(try...except...finally)。

当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。

比如调用一个没有定义的key,那么会报错说key不存在。

data={}data['name'] #KeyError: 'name'

 加入异常处理之后:

try:    data['name']   #except KeyError as e:    print('不存在的key',e) #不存在的key 'name'

 try代码块写的是可能会保错的代码,except 用来捕捉错误。相当于switch case。

如果有多种错误预判:

data={}data1 = []try:    data1[1]    data['name']except KeyError as e:    print('不存在的key',e)except IndexError as e:    print('列表操作错误',e)finally:    print('执行结束')#=========执行结果=========列表操作错误 list index out of range执行结束

 加入了一个finally,finally语句是一定会执行的。不管有没有执行except。

也可以把多个错误写到一起。

data={}data1 = []try:    data1[1]    data['name']except (KeyError,IndexError) as e:    print('不存在的key',e)finally:    print('执行结束')#==========执行结果======不存在的key list index out of range执行结束

 虽然写一起减少了代码,但是你不知道到底是哪个报的错。如果这两种错误都是用统一的处理方法的时候可以这么写。

Exception可以抓所有的错误,不建议一开始就使用。

 

data={}data1 = []try:    open('test.txt')    data1[1]    data['name']except (KeyError,IndexError) as e:    print('不存在的key',e)except Exception as e:    print('未知错误',e)finally:    print('执行结束')#=====执行结果==========未知错误 [Errno 2] No such file or directory: 'test.txt'执行结束

 也可以在加一个else,表示一切正常。

try:    a = 1    print(a)except (KeyError,IndexError) as e:    print('不存在的key',e)except Exception as e:    print('未知错误',e)else:    print('一切正常')finally:    print('执行结束')#======执行结果====1一切正常执行结束

 自定义异常:

class MyException(Exception):    def __init__(self,msg):        self.message = msg    def __str__(self):        return self.messagetry:    raise MyException('我的异常') #触发异常except  MyException as e:    print(e)#======执行结果====我的异常

 

转载于:https://www.cnblogs.com/qing-chen/p/7441213.html

你可能感兴趣的文章
redis 下载启动,设置、查询超时时间
查看>>
WinForm构造函数的作用
查看>>
2016第42周五
查看>>
centos7 取消自动锁屏
查看>>
在IDEA中代码自动提示第一个字母大小写必须匹配的解决
查看>>
C++的字符串格式化库
查看>>
面向接口编程的好处和优点
查看>>
放过设计模式吧
查看>>
架构师必看-架构之美第14章-两个系统的故事:设计之城(一)
查看>>
从c++转到Python需要注意的地方
查看>>
mysql 利用触发器(Trigger)让代码更简单
查看>>
[译]ASP.NET Core 2.0 视图引擎
查看>>
(原)InsightFace及其mxnet代码
查看>>
OpenCV学习:实现简单的图像叠加
查看>>
Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他
查看>>
java.io包的总体框架图(转)
查看>>
VKDevTool App黑盒调试工具
查看>>
那个你身边悄悄离职的人去哪儿了?IT人才流动大盘点
查看>>
精读《手写 SQL 编译器 - 智能提示》
查看>>
Java多线程干货系列—(四)volatile关键字| 掘金技术征文
查看>>