洗礼灵魂,修炼python(28)--异常处理(2)—>运用异常
你可能会想,卧槽这标题取的,前面不是说异常就是报错吗?异常还能运用?
是的,异常确实可以运用,可以刻意制造异常,在出现异常时捕获异常并对异常处理,所以进入本篇博文的话题—异常处理
异常处理:
异常处理分两个,捕获异常和抛出异常
一、捕获异常
1.为什么要捕获异常?
这个问题应该都会想到的,出错就出错,改就是啊,不急,先看一个例子:

我个人理解:在实际的开发中,异常是很常见的,程序员需要事先考虑所有的可能性,不然的话,你把你的程序给用户用,出现像上面这个情况,这样影响很大,在客户的角度,他们不管是什么,也不会在意这报错的是什么,他们希望的就是代码运行,永远不会出错,该怎么样就怎样的,如果出错,他们就会觉得不行,体验差,然后跟你抱怨怎么样怎么样,在他们心里也会觉得你并不是一个好的程序员。所以,异常,我们是在开发时就要考虑所有的可能性的,并且对每个可能性做出针对性的处理,让客户看不到这段红色的报错,并且用一个简单的或者通俗易懂的提示告诉客户哪里有问题。所以需要捕获异常
2.怎么捕获:
使用try-except[-finally]语句捕获异常
格式:
try:
检测范围(代码块)
except Exception[as reason] #使用Exception表示接受所有的异常,因为前面说了Exception是所有异常的基类
出现异常(Exception)后的处理代码
finally:
无论如何都会被执行的代码
例:

注意:
1):这里的except语句就是用来捕获异常类的,当你知道程序会报什么类型的错,就在后面写上什么异常类,这就是捕获
2):finally语句并不是必须出现,可以省略,finally语句的作用是无论如何都要运行,不管捕获到异常与否(下面会详解)
3):try语句其实也是判断语句中的一种,和if语句很相似,只是相对if比较特殊
3.else语句
说到这里,我想你应该发现了,try语句是捕获异常的,那如果程序没有出错呢?如果程序没错,那必须得输出结果对吧?前面又说到其实try语句就是判断语句中的一种,那么if都可以有else,try可不可有呢?当然可以,else语句就是当程序没错时作输出用的(是不是和if判断语句里的用法不太一样?下面会详解)。例:

不过要注意的是,else语句必须写在finally语句前面,不然啊报错:

4.打印异常
前面的代码中,可以看出程序捕获到异常后,会反馈给用户一个提示。但是又出现一个很常见的问题,在开发中,虽然我们尽可能的把我们想到的所有可能性做出了相应的解决方案,但是总有百密一疏的时候对吧?那么我们的程序在出现BUG的时候,由于我们把异常规避了,给用户一个提示完事,那万一就是这里出现错误,我们需要根据异常来修复程序,但是异常被规避了看不到啊,怎么办呢?
这里就又有一个新的写法:as语句(在前面导入模块时用过的)

看到没,我把这个异常类用as语句定义到一个变量里,然后打印这个变量,这样,上面那句话是提示给用户的,下面那句话就给我们程序员看的。这样是不是就给我们带来方便了?
二、抛出异常
1.什么是抛出异常:
为了开发需要,刻意的让程序报错
2.怎么抛出:
使用raise语句
格式:
raise 异常类
例:

raise语句就可以刻意的制造异常
三、从实际案列中剖析问题
例:打开文档并打印文档内容

在前面【文件操作】那一章应该都知道文件操作,如果不再需要文件,最后要把文件关闭的对吧?那么在程序某个过程报错时,程序就会跳出并结束,下面的代码就不再进行,所以根本到不了关闭语句那里,但是此时文件还是开启状态的,所以文件就一直是挂起状态,这样对开发的影响是很大的。而这里有了finally语句就可以无论如何都运行,所以无论如何都会在最后执行关闭语句把文件关闭了,这里就可以看出finally语句的功效了
前面文件操作时,应该介绍过with语句了,这里既然都说到文件操作,就再提一下。
with语句的功能就是在打开对象时,如果在一定时间内不再对对象有操作,那么with语句将会自动的把对象关闭,这也是python的回收机制的功劳

注意:
1.当有使用with语句,就可以不使用finally语句来关闭文件
2.python2和python3里异常类有点不同:
1):python2:

2):python3:

python2和python3还有哪些不同不一一解析,自己去体验吧,如果后面有时间,我专门开一篇博文介绍python2和python3的差别
四、else语句在if语句,while和for循环语句和在try语句里的区别
- 在if循环里:else表示否则则运行
- 在while和for循环里:else表示干完了能怎样,或者表示干不完就别想怎样。但当有break跳出循环,则不运行else
- 在try语句里:else表示如果没有异常,那就运行,有问题就不会运行
好的,异常处理这一块讲解完毕
洗礼灵魂,修炼python(28)--异常处理(2)—>运用异常的更多相关文章
- 洗礼灵魂,修炼python(85)-- 知识拾遗篇 —— 深度剖析让人幽怨的编码
编码 这篇博文的主题是,编码问题,老生常谈的问题了对吧?从我这一套的文章来看,前面已经提到好多次编码问题了,的确这个确实很重要,这可是难道了很多能人异士的,当你以为你学懂了,在研究爬虫时你发现你错了, ...
- 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块
feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...
- python基础-异常处理
一.错误和异常 程序中难免出现错误,而错误分成两种 1.1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def te ...
- what's the python之异常处理
what's the 异常 python程序中会出现异常,即bug.若出现异常程序就报错,异常之后的代码就不会继续往下执行,这是一个正常程序不允许出现的,但是在某些程序交互的时候难免会因为用户输入问题 ...
- python的异常处理及异常类定义
python的异常处理语法和大多数语言相似: try: try块的语句... except exceptiontype1 as var:#使用as语句获得本次捕获到的异常的实例var except块语 ...
- Python(异常处理)
一 错误和异常 程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) 2.逻辑错误(逻辑错误) 什么是异常 异常就是程序运行时发 ...
- Python之异常处理(Day27)
一.错误和异常 part1: 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def test: pass #语法错 ...
- Python编程-异常处理
一.错误和异常 1.程序中难免出现错误,而错误分成两种 (1)语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def t ...
- python之异常处理模块
一 . python 内置的异常类 在程序运行过程中,如果出现错误,python解释器会创建一个异常对象,并抛出给系统运行时.即程序终止正常执行流程,转而执行异常处理流程. 在某种特殊条件下,代码中也 ...
- [python]python的异常处理
异常处理:首先了解异常,程序出现逻辑错误或者用户输入不合法都会引发异常,而这些异常并不是致命的所以不会导致程序崩溃死掉.可以利用Python提供的异常处理机制在异常出现时及时捕获,并从内部自我消化. ...
随机推荐
- 记CTC原理
CTC,Connectionist temporal classification.从字面上理解它是用来解决时序类数据的分类问题.语音识别端到端解决方案中应用的技术.主要是解决以下两个问题 解决语音输 ...
- 在Kubernetes中部署GlusterFS+Heketi
目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...
- Linux编程 3 (初识bash shell与man查看手册)
一.初识bash shell 1.1 启动 shell GNU bash shell 能提供对Linux系统的交互式访问.通常是在用户登录终端时启动,登录时系统启动shell依赖于用户账户的配置. ...
- CentOS 7 个性化配置指南
博客原文地址:CentOS 7 个性化配置指南 - Wind Spirit 0x00 前言 该教程主要安装了如下软件包 iptables MySQL PHP PHP 相关模块 Nginx 主要配置实现 ...
- Django之FBV与CBV
一.FBV与CBV FBV(function based views),即基于函数的视图:CBV(class based views),即基于类的视图,也是基于对象的视图.当看到这个解释时,我是很萌的 ...
- Infopath 2013 通过UserProfileService读取AD用户信息
我刚刚看过什么C#文章获得当前用户使用Web服务的详细信息. 其实无需编写任何代码,可以实现完全相同的结果.所以我在这里简单的介绍一下: *如果你已经熟悉这个,这个篇文章可以跳过. *此介绍是建立在I ...
- 程序员快速掌握的UI设计技巧
一.概要 功能与内在很关键,UI与外表也重要. 1.1.选择主色调 1.1.1.三原色 三原色指色彩中不能再分解的三种基本颜色,我们通常说的三原色,即红.黄.蓝.三原色可以混合出所有的颜色,同时相加为 ...
- Eclipse SVN 冲突的 介绍 及 四种解决方式
https://blog.csdn.net/diyu122222/article/details/79879376
- Linux中重命名乱码文件
Linux下,如何将一个乱码的文件进行重命名 方法一: 命令格式:mv $(ls |egrep "[^a-zA-Z0-9.-]") tandao.tx [root@nb o]# l ...
- js 如何移除一个匿名函数的绑定事件
大家都知道 addEventListener的用法 绑定事件 例如 element.addEventListener(type,handler,false); element是dom元素 type是事 ...