简介


当你的程序不能正常运行的时候,Python会在控制台打印一段提醒,告诉你一个错误,这个错误就是异常。

错误


我在控制台写了一段无效的代码,将print()的括号去掉,在执行这条语句的时候,系统提示语法错误,无效的语句(我百度翻译的)。这就是错误处理器所作的工作。

再换一种方式写错误:

在程序获取用户输入的时候,我们使用CTRL+d引发了一个EOFError错误,接下来我们尝试去处理这样的错误。

处理异常


使用try---except语句来处理异常。我们通常把容易产生异常的语句放置在try块中,把做异常处理的语句放在except块中。

import sys

try:
a = input('Enter something:')
except(EOFError):
print('\nWhy did you do an EOF on me ?')
sys.exit()
except:
print('\nSome error/exception occurred.') print('Done')

运行结果

我们把所有可能引发错误的语句放在try块中,然后在except从句/块中处理所有的错误和异常。except从句可以专门处理单一的错误或异常,或者一组包括在圆括号内的错误/异常。如果没有给出错误或异常的名称,它会处理 所有的 错误和异常。对于每个try从句,至少都有一个相关联的except从句。

你还可以让try..catch块关联上一个else从句。当没有异常发生的时候,else从句将被执行。

import sys

try:
a = input('Enter something:')
except(EOFError):
print('\nWhy did you do an EOF on me ?')
sys.exit()
except:
print('\nSome error/exception occurred.')
else:
print('no error') print('Done')

运行结果

 raise引发异常


你可以使用raise语句抛出异常。你需要指明错误/异常的名称和伴随异常触发的异常对象。这个异常应该是Error和Exception类的子类。这就用到了继承的思想,使用__init__方法初始一些方法和参数。

class ShortInputException(Exception):
def __init__(self,length,atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast try:
s = input('Enter something-->')
print(len(s))
if len(s) < 3:
raise ShortInputException(len(s),atleast = 3)
except(EOFError):
print('\nWhy did you do an EOF on me ?')
except(ShortInputException) as x:
print('ShortInputException: The in input was of length %d,\
was expecting at least %d' % (x.length,x.atleast))
else:
print('No exception was raised.')

运行结果

try...finally


假如在你读文件的时候发生了异常,但是无论如何文件都要关闭。这个时候该怎么做呢?

这里我们需要使用finally块来完成。

在使用try捕获异常的时候,我们可以同时使用except块和finally块。

import time

try:
f = open('poem.txt')
while True: # our usual file-reading idiom
line = f.readline()
if len(line) == 0:
break
time.sleep(2)
print(line)
finally:
f.close()
print('Cleaning up...closed the file')

运行结果

这里使用了time的sleep函数,里面的参数是它的运行间隔。

这样我们就有时间去使用CTRL+c使程序发生异常。这时候我们发现finally块中的语句还是运行的,文件正常关闭了。

从0开始的Python学习016异常的更多相关文章

  1. python学习笔记——异常

    转自 http://www.cnblogs.com/rubylouvre/archive/2011/06/22/2086644.html Python内建异常体系结构 BaseException +- ...

  2. Python学习 之 异常

    1.python中处理异常的方式 #coding:utf8 filename=raw_input("请输入你要操作的文件") try: f=open(filename) print ...

  3. 从0开始的Python学习017Python标准库

    简介 Python标准库使随着Python附带安装的,它包含很多有用的模块.所以对一个Python开发者来说,熟悉Python标准库是十分重要的.通过这些库中的模块,可以解决你的大部分问题. sys模 ...

  4. Python学习7——异常

    编写程序时,通常能够区分正常和异常情况.为了处理这些异常,可在每个可能出现异常的地方都使用上条件语句,但这样大大降低了程序的可读性,那么怎么解决哪?Python提供强大的替代解决方案——异常处理机制. ...

  5. 从0开始的Python学习019更多的Python内容2

    书接上文,接演Python全传 话说学了这么多Python的基础知识,也该写一点让别人看不懂的代码了. lambda lambda表达式,是一个方法的简化形似,它没有自己的代码块,它后面的语句就是它的 ...

  6. 从0开始的Python学习018更多的Python内容

    特殊的方法 之前学习的都是一些常用的方法,为了使我们的学习更加的完整,我们在这里学习一些特殊的方法. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的索引操作( ...

  7. 从0开始的Python学习015输入与输出

    简介 在之前的编程中,我们的信息打印,数据的展示都是在控制台(命令行)直接输出的,信息都是一次性的没有办法复用和保存以便下次查看,今天我们将学习Python的输入输出,解决以上问题. 复习 得到输入用 ...

  8. 从0开始的Python学习014面向对象编程

     简介 到目前为止,我们的编程都是根据数据的函数和语句块来设计的,面向过程的编程.还有一种我们将数据和功能结合起来使用对象的形式,使用它里面的数据和方法这种方法叫做面向对象的编程. 类和对象是面向对象 ...

  9. 从0开始的Python学习013编写一个Python脚本

    通过之前的学习我们已经了解了Python的很多基础运用了,现在我们尝试着做一个有使用价值的小脚本. 问题 需求: 我想要一个可以给我备份重要文件的程序. 需求分析: 首先文件是有存储路径,文件的路径和 ...

随机推荐

  1. 学习python的第一天

    2019.4.25自我总结 一.Typora 关于用Typora 自我感觉良好,基本快捷键也比较简单,ps:还是要多用用 二.编程 1.编程语言 是用来定义计算机程序的形式语言.它是一种被标准化的交流 ...

  2. Win64下编译OSG详细过程(Win10+VS2015+OSG3.6.3)

    目录 1. 数据资源准备 2. 编译第三方库 3. 编译GDAL 4. 编译OSG 1) CMAKE_INSTALL_PREFIX: 2) BUILD_OSG_EXAMPLES/BUILD_MFC_ ...

  3. MTK Camera相关的Makefile Option详解

    列举了所有Camera相关的MakefileOption,并对其功能含义和OptionValues做了详细的解释.[KEYWORD]Others[SOLUTION]YUVCAM_INTERPOLATI ...

  4. SQL Server作业报错特殊案例

    一个作业报错,报错信息如下,从错误信息根本看不出为什么出错,手工运行作业又成功了.一时不清楚什么原因导致作业出错. Message Executed as user: NT SERVICE\SQLSE ...

  5. ORM(四)字段参数

    null:如果null=True,则该字段在数据库中的值可以为NULL,默认null=False. blank:如果blank=True,前端form表单可以空,注意,这与NULL不同.NULL纯粹与 ...

  6. July 01st. 2018, Week 27th. Sunday

    Empty your cup so that it may be filled. 清空杯子,方能再次装满. From Bruce Lee. We can't learn anything new if ...

  7. Vue2.x源码学习笔记-Vue源码调试

    如果我们不用单文件组件开发,一般直接<script src="dist/vue.js">引入开发版vue.js这种情况下debug也是很方便的,只不过vue.js文件代 ...

  8. 【死磕 Spring】----- IOC 之 加载 Bean

    原文出自:http://cmsblogs.com 先看一段熟悉的代码: ClassPathResource resource = new ClassPathResource("bean.xm ...

  9. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  10. [Swift-2019力扣杯春季决赛]2. 按字典序排列最小的等效字符串

    给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...