Python用Try语句捕获异常的实例方法
作者:Ma_Qiao2020 发布时间:2021-07-14 10:28:54
python的异常,以及用try复合语句处理异常。
运行代码时有时会出现各种各样的错误,致使解析器中断执行,并提示xxxxxxErorr的提示,后面跟具体的错误的描述,这被称为是引发了异常。
其实异常告诉我们的是遇到了什么类型的错误。xxxxErorr就是python内置的异常类型。每一种异常类型,都有它自己的错误信息。
有一种比较容易辨识,容易处理的错误,语法错误:SyntaxError
是由于写代码时的语法错误,大部分的解析器都会提前提示,像pycharm,在书写时如果语法错误,都会有波浪线提示。语法上的错误很好处理,类似与写文章写错字了,改正就行了。
如何处理异常:
除了语法错误能轻松搞定,其他有些异常类型不影响代码的功能,而又不想让异常中断执行时,就要对异常进行处理,而不让他中断程序:
例如:有一个字典personDetail={"name":“光头强”}里边是光头强的资料,想取到它的资料,但具体都有什么资料我们不知道,如果输入的键不存在就会引发异常而中断执行。致使后面的代码也为无法执行。
那么就要捕获这些异常,绕过它,能让下面的代码继续运行。python提供了try语句来实现这些功能。
语法:
try:
可能发生异常的代码
except 异常类型:
捕获的异常后要执行的代码
try 语句的工作原理如下。
1)执行 try 子句时如果没有异常发生,则跳过 except 子句并完成 try 语句的执行。
2)如果在执行try 子句时发生了异常,则跳至except子句。
3)执行 except 子句 ,如果引发异常的类型和 except 关键字后面的异常匹配,就是捕获了异常,执行except子句。
例如:
gtqDict={"Name":"光头强","Age":34,"Gender":"男"
try:
print(gtqDict["Weight"])
except KeyError:
print("Weight不存在,继续走"
print(gtqDict["Age"])
print(gtqDict["Gender"])
例子不管weight是否存在,都能使得程序完。
捕获多个异常:
有时不确定会发生哪种异常,就把异常类型以元组的形式组包统统放在except后面,来匹配可能发生的异常:
比如:要打印光头强年龄的Age键,不确定这个键是否存在,就用KeyErorr,不确定会不会发生键名是否正确,就用NameErorr。
例如:
gtqDict={"Name":"光头强","Age":34,"Gender":"男"
try:
print(gtqDict["age"])
except (KeyError,KeyError):
print("age错误"
print(gtqDict["Name"])
print(gtqDict["Gender"])
捕获异常的描述信息:可以将异常的具体描述打印出来,以供参考。
try:可能发生异常的代码
except (KeyError,KeyError) as 信息变量:
print(信息变量)
例如:
gtqDict={"Name":"光头强","Age":34,"Gender":"男"}
try:
print(gtqDict["Weight"])
except (KeyError,KeyError) as e:
print(type(e),e)
print(gtqDict["Name"])
print(gtqDict["Gender"])
捕获所有异常:
前面提过,引发异常的xxxxErorr都是python异常的类型。python中所有异常类型都是基类Exception的派生类。
那么在写代码的时候不用指定异常的具体类型,只要捕获基类就等于捕获了所有的异常,但输出的是具体的异常信息,这很有利于在大范围内找到具体的错误。
语法:
try:可能发生异常的代码
except Excepthon as 信息变量:
print(信息变量)
例如:
gtq="光头强"
try:
print(name)
except Exception as e:
print(type(e),e
print("gtq")
---<class 'NameError'> name 'name' is not defined
---gtq
异常里的else子句:
else子句是可选的,如果使用,必须放在所有的except子句之后。
它是在try子句没有发生异常的情况执行。
例如:
gtq="光头强"
try:
name=gtq
except Exception as e:
print(type(e),e)
else:
print("%s是一个伐木工人"%name)
finally子句: 写在try语句的最后。
不管 try 子句里面是否有异常,finally 子句都会执行。
例如:
gtq="光头强"
try:
name=GTQ
except Exception as e:
print(type(e),e)
else:
print("%s是一个伐木工人"%name)
finally:
print("调用资料结束")
---<class 'NameError'> name 'GTQ' is not defined
---调用资料结束
猜你喜欢
- QQ影音至9月发布之后一直口碑很好,视觉界面和交互设计也颇受好评,这是设计师们努力的结果,也是众多用户反馈的功劳。我们希望可以提供更多价值回
- 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,可是也有它们的不同之处,这段时间刚学完函数与存储过程,来给自己
- 摘要在Nginx和uWSGI还没配置时,单独在url.py使用apscheduler设置定时任务,使用python manage.py ru
- 变量覆盖漏洞<?php$flag='xxx'; extract($_GET); if(isset($shiyan))
- 本文为大家分享了python数据分析数据标准化及离散化的具体内容,供大家参考,具体内容如下标准化1、离差标准化是对原始数据的线性变换,使结果
- 本文实例为大家分享了python接入微信聊天机器人的具体代码,供大家参考,具体内容如下1.安装库wxpy:pip install -U wx
- 什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般
- 一、从外部文档中粘贴时,如果只要文字而不想要其格式,可以使用“Edit→paste as text”命令,不要直接用Ctrl+V。二、当有浏
- 什么是MySql数据库?通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。我们通常
- 在找工作的时候,我们会选择上网查询招聘的信息,或者是通过一些招聘会进行现场面试。但由于信息更新不及时,有一些岗位会出现下架的情况,如果我们不
- 发现这个也是偶然,在测试的时候发现的,因此问题还发现一个bug。蛮有意思~ 假如输入http://www.aspxhome.com的话,在
- Notepad++是一款不错的编辑器,很轻巧,我很喜欢它。再换个主题,加个代码高亮,看上去就更专业了。如果你是Mac用户,应该听说或使用过T
- 对于值传递和引用传递,书本上的解释比较繁琐,而php面试中总会出现,下面我会通过一个生活的例子带大家理解它们之间区别。第一步假设我们去酒店订
- 一对多(ForeignKey)class ForeignKey(ForeignObject): def __init__(sel
- <script>alert(escape("人"));alert(encodeURI("人&quo
- int 数字类型class int(object): """ int(x=0) -&g
- 备注:Ken Henderson 从开发者的角度来阐述了SQL SERVER 2000内存管理的内部机制简介在本专栏中,我们将从一个开发者的
- 您是否记得关闭所有的XHTML元素,在HTML中一些元素没有必要被关闭。当下一个元素开始的时候,上一个元素就自动被关闭。XHTML中是不允许
- 1.Python代码import cx_Oracletns=cx_Oracle.makedsn('127.0.0.1',
- Altova 公司的 XMLSPY 是个不可多得的好东西,它几乎可以开发所有的 XML 产品。最近用它来做 Schema