Python异常捕获与处理

Stella981
• 阅读 650

一、任务描述

  本实验任务主要对Python异常进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python异常的基本操作。并对异常的基本操作进行整理并填写工作任务报告。

二、任务目标

1、掌握Python异常的捕获

2、掌握Python异常的处理

三、任务环境

Ubuntu16.04、Python2.7

四、任务分析

  异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

  一般情况下,在Python无法正常处理程序时就会发生一个异常。

  异常是Python对象,表示一个错误。

  当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

五、任务实施

步骤1、环境准备

  右击Ubuntu操作系统桌面,从弹出菜单中选择【Open in Terminal】命令打开终端。

  通过【cd /home】切换到home目录下。【ls】查看该目录下的所有内容。

Python异常捕获与处理

图1 切换目录

  【mkdir except】在home目录下创建except文件夹。

Python异常捕获与处理 图2 创建文件夹

步骤2、捕捉异常

  【cd except】切换到except目录下,【vim except1.py】回车后创建并编辑名为except1的Python文件

Python异常捕获与处理 图3 创建Python文件

  回车后进入编辑框内,按键盘【i】进入编辑状态,输入如下程序。

  分别获取用户输入的x与y值,并进行除法运算。

Python异常捕获与处理 图4 编辑Python文件

  编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框,【python except1.py】执行except1的Python文件。

  分别输入第一个数字6,第二个数字0。回车后报ZeroDivisionError异常,该异常在除法或者模除操作的第二个参数为0时引发。

Python异常捕获与处理 图5 运行Python文件

  再次进入except1.py文件编辑状态,修改程序。

Python异常捕获与处理 图6 编辑Python文件

  再次运行except1.py程序。再次输入第一个数字6,第二个数字0。回车后不报异常,并将except后的打印语句输出。根据结果证明try/except将异常捕捉并处理

Python异常捕获与处理 图7 运行Python文件

  如果用户在提示符后面输入非数字类型的值,就会产生另外一个异常。

  运行except1.py程序,输入第一个数字6,第二个值为’shiyanbar’,回车后报TypeError异常。

Python异常捕获与处理 图8 运行Python文件

  因为except子句只寻找ZeroDivisionError异常,这次的错误就溜过了检查并导致程序终止。

  捕捉这个异常,可以直接在同一个try/except语句后面加上另一个except字句。

  再次进入except1.py文件编辑状态,修改程序。

Python异常捕获与处理 图9 编辑Python文件

  再次运行except1.py程序。再次输入第一个数字6,第二个值为’shiyanbar’。回车后不报异常,并将except后的打印语句输出。

Python异常捕获与处理 图10 运行Python文件

  当然这种解决办法可以捕获异常,但产生的问题是程序中会增加一大堆可能错误情况的except,会让代码相当的难读。

  如果需要用一个块解决多个类型异常,可以将它们作为元组列出。

  再次进入except1.py文件编辑状态,修改程序即可。

Python异常捕获与处理 图11 编辑Python文件

  如果想让程序继续运行,但是又因为某种原因想记录下错误。

  再次进入except1.py文件编辑状态,修改程序。程序会打印异常,并且程序会继续运行。

Python异常捕获与处理 图12 运行Python文件

  再次运行except1.py程序。再次输入第一个数字6,第二个值为0。回车后不报异常,并将异常的信息输出。

Python异常捕获与处理 图13 运行Python文件

  就算程序中能处理好几种类型的异常,但有些异常还是会从眼皮下溜走。

  再次运行except1.py程序。再次输入第一个数字6,第二个值为空。回车后报SyntaxError异常。

Python异常捕获与处理 图14 运行Python文件

  可以用一段代码捕捉所有异常,可以在except子句中忽略所有的异常类。

  再次进入except1.py文件编辑状态,修改程序。

  像这样捕捉所有的异常是危险的,因为会隐藏程序员未想到并且未做好准备处理的错误等。这时使用except Exception,e会更好些。

Python异常捕获与处理 图15 运行Python文件

  在有些情况中,没有异常发生执行一段代码是很有用的,可以像对条件和循环语句那样,给try/except添加个else字句。

  再次进入except1.py文件编辑状态,修改程序。

  这里的循环只在没有异常发生引发的情况下才会退出(由else字句中的break语句退出),只要有错误发生,程序会不断要求重新输入,并将异常信息打印。

Python异常捕获与处理 图16 编辑Python文件

  再次运行except1.py程序。

  再次输入第一个数字6,第二个值为0。回车后报’integer division or modulo by zero’异常。

  再次输入第一个数字6,第二个值为’shiyanbar’,回车后报’unsupported operand type(s) for /: ‘int’ and ‘str’’。

  再次输入第一个数字6,第二个值为3,得到除结果。

Python异常捕获与处理 图17 运行Python文件

  最后,finally字句可以用来在可能的异常后进行清理,和try联合使用。

  通过【vim except2.py】创建并编辑名为except2的Python文件。编辑如下代码。

  在程序中,finally字句肯定会被执行,不管try字句中是否发生异常。

Python异常捕获与处理 图18 编辑Python文件

  【python except2.py】运行python文件,在程序崩溃之前,对于变量x的清理完成。

  因为使用del语句删除一个变量是非常不负责的清理手段,所有finally子句用于关闭文件或关闭因系统错误而无法正常释放的资源。比如文件关闭,释放锁,把数据库连接返还给连接池等

Python异常捕获与处理 图19 运行Python文件

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
03.Android崩溃Crash库之ExceptionHandler分析
目录总结00.异常处理几个常用api01.UncaughtExceptionHandler02.Java线程处理异常分析03.Android中线程处理异常分析04.为何使用setDefaultUncaughtExceptionHandler前沿上一篇整体介绍了crash崩溃
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这