python异常捕获_python 捕获异常

异常:由于代码的逻辑或者语法错误导致的程序中断。

在学习Python的过程当中,大家一定要区分清楚异常和布尔值False

布尔值的False只是一个值,通常代表的是一个条件的不成立,常用于逻辑判断

比如:

1 num = 2

2 print(num > 3)3 if num > 3:4 print("num > 3")

异常指的是由于代码的逻辑或者语法错误导致的程序中断

比如:

1 num = 2

2 2+"2"

了解了上面的逻辑之后,我们来看看大家在代码当中经常出现的几种错误,和常见原因

错误类型

错误名称

错误解释

SyntaxError

语法错误

是语法导致的错误,通常的报错是 invalid syntax,比如:缩进语句块不加冒号,遇到这种错误,就要详细的检查自己的的语句了

IndexError

索引错误

是索引引用导致的错误,通常的报错是 list out of range,遇到这个错误就要认真的检查自己是不是取了一个超出序列长度的索引

NameError

命名错误

是变量命名导致的错误,通常的报错是 no model named ... ,遇到这个错误就要查看自己的变量了,初学者要注意是不是字符串没有加引号

AttributeError

属性错误

是调用对象属性时候导致的错误,通常报错是 ... object has no attribute ... 遇到这个错误就要查看自己的对象是不是调用了不存在的属性了

KeyError

键错误

是字典取值时候导致的错误,字典没有这个键

TypeError

类型错误

是对对象进行非本类型操作时候导致的,没有固定的报错,常见的有 ... not callabel ,遇到这种错误,要认真梳理自己对对象的操作了,比如,非函数对象加括号调用

当然异常的类型还有好多,在这就不一一列举了,我们来看捕获异常的关键字

捕获异常最简单的写法如下

try: #尝试执行缩进下面的报错

1+"1"

except: #如果发生错误,打印Error

print("Error")>>> Error

这里我们尝试执行 1+“1”,如果可以执行就执行,如果发生错误就执行下面的代码。

但是,在工作当中,这样的代码并没有太好的效果,我们通过这段代码既无法实现错误内容的输出,也不能实现错误的处理,只是让程序不报错的执行了下去,这个显然不好使。

所以我们首先要考虑的就是如何获取具体的错误内容,例子如下:

例1:

try:1+"1"

exceptException as e:print(e)>>> unsupported operand type(s) for +: 'int' and 'str'

这里我们用到了两个之前没有用到过的关键词:

1、Exception 所有的错误

2、as 别名

所以例1代码的含义就是尝试执行 1+"1”,如果只成功就可以,否则无论发生任何错误,都把这个错误返回的内容起别名为e,在下面输出出来。在这里要注意的一点就是,e可以被打印但是不是字符串对象,所以不可以进行任何字符串操作。

try:1+"1"

exceptException as e:print(type(e))>>>

例2:

try:1+"1"

exceptTypeError as e:print(e)>>> unsupported operand type(s) for +: 'int' and 'str'

这里和上面的例1唯一的不同就在于except后面跟了具体的错误类型,意思很明确,当发生TypeError的时候,我进行如下处理,至于其他错误,就让他报错去吧。

当然这样的说法有点随性,认真的查看,着多种错误类型的捕获异常给我们对同一语句进行不同的异常处理带来了很大的遍历性,毕竟不是所有的错误都可以pass!

了解了上面的报错,那么接下来要认真研究的就是捕获异常的另外两个关键字:else 和finally

首先是他两的逻辑

else:代表在try执行成功之后,进行执行,放在except的后面

finally:代表最后,无论执行try成功还是失败,都会执行。作为最后的收尾

了解之后,我们来查看我们例子

例1:

1 try:2 1+"1"

3 exceptException as e:4 print(e)5 else:6 print("it is ok")7 finally:8 print("ok it's over")9

10 >>> unsupported operand type(s) for +: 'int' and 'str'

11 >>> ok it's over

例2:

1 try:2 1+1

3 exceptException as e:4 print(e)5 else:6 print("it is ok")7 finally:8 print("ok it's over")9

10 >>> it isok11 >>> ok it's over

在例1当中,我们执行try失败,所以except和finally执行,在例子2当中,我们执行try成功,所以else和finally成功。

else和finally的出现极大的方便了我们对捕获异常和异常处理的完整流程描述,不如下面的例子

1 importpymysql2 try:3 #尝试连接数据库

4 connect =pymysql.connect(5 host = "localhost",6 user = "root",7 password = "123",8 database = "outTest"

9 )10 exceptException as e:11 #失败输出错误

12 print(e)13 else:14 #如果成功进行数据查询

15 cursor =connect.cursor()16 cursor.execute("select * from login")17 all_data =cursor.fetchall()18 print(all_data)19 finally:20 #不论如何进行结束通知

21 print("执行结束")

到这里,可能好多读者觉得捕获异常到此结束,其实并不是这样,还可以有一个好的建议给到大家,我们可以尝试使用。先看下面的两个案例:

例1:

try:1+"1"

exceptException as e:print(e)>>> unsupported operand type(s) for +: 'int' and 'str'

例2:

try:1+"1"

exceptException as e:

error=traceback.format_exc()print(error)>>>Traceback (most recent call last):

File"C:/Users/bian/Desktop/TestProject/twistedProject/twistedProject.py", line 67, in

1+"1"TypeError: unsupported operand type(s)for +: 'int' and 'str'

例1和例2同样实现了捕获异常的功能,但是例子2的返回更加的专业,并且利于调试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4、requests-基础

1、发出一个get请求: r requests.get(https://github.com/timeline.json) 返回给我们的r,是一个requets的对象,这个requests的对象中我们可以调用一些属性,方便我们得到更加详细的信息; r.status_code # 响应状…

C语言验证大小端的几个方法

大小端的问题在很多面试笔试中都会遇到,最直接的考察是,笔试的时候,让你写一个代码,如何确定当前系统是大端还是小端的。什么是大端和小端呢?大端: 高位字节排放在内存的低地址端,低位字节排放在…

python中import os_Python常用模块os--与操作系统交互

os.getcwd() 返回当前工作目录绝对路径 Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32 Type "copyright", "credits" or "license()" for more information. >>> import os >>…

Windows系统带你一步一步无脑使用babel

不废话直接写看步骤: 1、在F盘新建一个文件夹叫babel 2、npm init 初始化项目 3、全局安装npm install babel babel-cli -g 4、项目安装npm install babel-cli --save-dev 项目目录里会多一个node_modules包 5、新建一个es6.js文件 随便写一段es6 6、输入指令babel …

php处理base64数据,php基于base64解码数据与图片的转换

header(Content-type:text/html;charsetutf-8);//读取图片文件,转换成base64编码格式$image_file ./4296762_165319032930_2.jpg;$image_info getimagesize($image_file);// $image_info /9j/4AAQSkZJRgABAQAASABIAAD......;$base64_image_content "data:{…

python sklearn 归一化_数据分析|Python特征工程(5)

OX00 引言数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。特征做不好,调参调到老。重视调参&#x…

盘点多款国产Linux桌面操作系统

编辑:strongerHuang微信公众号:strongerHuang素材来源:百度百科、网络国产操作系统多为以Linux 为基础二次开发的操作系统。2014年4月8日起,美国微软公司停止了对Windows XP SP3操作系统提供服务支持,这引起了社会和广…

include包含头文件的语句中,双引号和尖括号的区别

include包含头文件的语句中,双引号和尖括号的区别 #include <>格式&#xff1a;引用标准库头文件&#xff0c;编译器从标准库目录开始搜索 #incluce ""格式&#xff1a;引用非标准库的头文件&#xff0c;编译器从用户的工作目录开始搜索预处理器发现 #include …

Oracle订单号就是授权号码,oracle多单号的说明

在ORACLE中&#xff0c;单引号有两个作用&#xff0c;一是字符串是由单引号引用&#xff0c;二是转义。单引号的使用是就近配对&#xff0c;即就近原则。而在单引号充当转义角色时相对不好理解1、从第二个单引号开始被视为转义符&#xff0c;如果第二个单引号后面还有单引号(哪…

kafka rabbitmq优劣对比_Kafka、RabbitMQ、RocketMQ等消息中间件的对比

原文链接&#xff1a;Kafka、RabbitMQ、RocketMQ等消息中间件的对比消息中间件现在有不少&#xff0c;网上很多文章都对其做过对比&#xff0c;在这我对其做进一步总结与整理。RocketMQ淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件&#xff0c;使用Mysql作为消息存…

网络负载平衡oracle,[Oracle] RAC 之 - 负载均衡深入解析

Oracle RAC提供两种方式实现负载均衡&#xff0c;第一种是纯技术手段&#xff0c;即在用户连接时&#xff0c;根据系统当前的负载情况决定由哪个节点处理用户请求&#xff1b;第二种是面向业务&#xff0c;人为的把应用切分成很多service&#xff0c;通过某个service过来的连接…

你应该知道这些有意思的代码

Kyle McCormick 在 StackExchange 上发起了一个叫做 Tweetable Mathematical Art 的比赛&#xff0c;参赛者需要用三条推这么长的代码来生成一张图片。具体地说&#xff0c;参赛者需要用 C 语言编写 RD 、 GR 、 BL 三个函数&#xff0c;每个函数都不能超过 140 个字符。每个函…

parachute

actuality /ˌktʃuˈləti/ Jane thinks that they will probably marry in actuality but that he can not love the vain, shallow woman. /ˈwʊmən/ vain men can be jsut as vain as women /ˈwɪmɪn/ 男人有时和女人一样虚荣 The instructor struggled vainly to …

python 对xlsx文件数根据日期进行统计分析_Python处理Excel的常用操作(一)

最近一直忙着学习和写开题报告&#xff0c;都没有时间更文了&#xff0c;今天偷偷来休闲一下。很多人一开始学习python&#xff0c;就是看到了很多关于python能够快速处理和解决表格的广告&#xff0c;于是便有了今天的分享。我主要利用pandas库来做一些简单且常规的操作。1、创…

(四)Asp.net web api中的坑-【api的返回值】

void无返回值IHttpActionResultHttpResponseMessage自定义类型我这里并不想赘述这些返回类型&#xff0c; 可以参考博文http://blog.csdn.net/leonken88/article/details/53063693 和大神的http://www.cnblogs.com/landeanfen/p/5501487.html 我要说我遇到的坑是&#xff0c; p…

C语言实现树,你一定看得懂

之前写了好多篇文章关于数据结构的&#xff0c;既然讲到了数据结构&#xff0c;那么就必须要说一下树&#xff0c;树这个数据结构使用范围非常广&#xff0c;应用前景广阔。关联文章&#xff1a;五分钟搞懂什么是红黑树&#xff08;全程图解&#xff09;Linux 内核红黑树分析这…

程序员开发windows linux,好程序员不用windows作开发环境

好程序员不用windows作为开发环境&#xff0c;今天我想就这个点吐槽一下。最近因为工作关系&#xff0c;需要在windows机器上工作一段时间&#xff0c;作为一个用了多年windows&#xff0c;然后切换到ubuntu作为工作环境两年时间&#xff0c;然后切换到mac大概3年多时间只到最近…

else应输入一个语句是什么意思_Python基础知识储备,关于if-else使用性能的一点感悟...

前面给大家介绍的if-if分支结构是只要条件满足就会执行&#xff1b;而if-else的语句结构是前面的条件成立执行什么操作&#xff0c;则下面的分支结构就不会被执行&#xff0c;若前面的条件不成立(否则)做什么。以下通过三个案例给大家演示if-else语句的使用方法&#xff1a;Pyt…

你应该拥有的无名剑

想了很久的名字&#xff0c;刹那间我不知道怎么给文章起名字了&#xff0c;一个响亮的名字远比正文来得精彩&#xff0c;既然题目比文章精彩&#xff0c;那么就会喧宾夺主&#xff0c;所以我们看很多古诗词的名字起名《无题》&#xff0c;也可以理解为某个时段&#xff0c;肚子…

你真的知道敏捷和迭代吗?

在这敏捷开发横行的时代中&#xff0c;人人都在谈敏捷&#xff0c;人人都在谈迭代&#xff0c;似乎大家好像都尝到了敏捷带来的甜头&#xff0c;记得有一次跟朋友吃饭&#xff0c;说他们现在的项目用敏捷开发&#xff0c;每个迭代都能看到不断完善的产品&#xff0c;非常有成就…