洗礼灵魂,修炼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提供的异常处理机制在异常出现时及时捕获,并从内部自我消化. ...
随机推荐
- 关于Python的import机制原理
很多人用过python,不假思索地在脚本前面加上import module_name,但是关于import的原理和机制,恐怕没有多少人真正的理解.本文整理了Python的import机制,一方面自己总 ...
- 使用SonarCloud对.NET Core项目进行静态代码分析
本文将介绍如何使用SonarCloud进行.NET Core项目的静态代码分析.SonarCloud是SonarQube提供的基于云的版本,特别针对于开源项目是免费的. 首先,在sonarcloud. ...
- Python核心编程 | 浅谈闭包的使用
1.函数的引用 >>> def test(): print('test:') >>> test <function test at 0x10ffad488 ...
- 详解C#异常处理
一.程序运行时产生的错误通过使用一种称为异常(Exception)的机制在程序中传递,通过异常处理(Exception Handling)有助于处理程序运行过程中发生的意外或异常情况:异常可由CLR和 ...
- Spring Boot初识(1)-了解Spring Boot
写在前面:半年工作经验的Java程序员一枚,奈何公司用的是自研的Web框架和RPC框架,本着good good study,day day up的精神和为以后发展的考虑觉得自己需要学点开源的东西,写的 ...
- JS 从斐波那契数列浅谈递归
一.前言 昨晚下班后,经理出于兴趣给我们技术组讲了讲算法相关的东西,全程一脸懵逼的听,中途还给我们出了一道比较有趣的爬楼问题,问题如下: 假设一个人从地面开始爬楼梯,规定一步只能爬一坎或者两坎,人只能 ...
- Django之stark组件
现在让我说啥是stark组件,我也说不清楚.反正从今天讲的知识来看,今天完成的就是自己写一个模块,这个模块包含了admin后台管理工具的一些比较好用的功能,我们把它提炼出来,也就是相当于自己写一个ad ...
- 动态规划法(三)子集和问题(Subset sum problem)
继续讲故事~~ 上次讲到我们的主人公丁丁,用神奇的动态规划法解决了杂货店老板的两个找零钱问题,得到了老板的肯定.之后,他就决心去大城市闯荡了,看一看外面更大的世界. 这天,丁丁刚回到家,他 ...
- Ubuntu16.04安装后开发环境配置和常用软件安装
Ubuntu16.04安装后1.安装常用软件搜狗输入法+编辑器Atom+浏览器Chome+视频播放器vlc+图像编辑器GIMP Image Editor安装+视频录制软件RcordMyDesktop安 ...
- 无法初始化 PowerShell 主机解决方案
Question无法初始化 PowerShell 主机.如果您的 PowerShell 执行策略设置设为 AllSigned,请先打开程序包管理器控制台以初始化该主机. --------------- ...