为什么使用异常

错误处理、事件通知、特殊情况处理、退出时的行为、不正常的程序流程。

简单的示例

在没有任何定义x变量的时候:

print x

print 1

将会抛出NameError异常:

NameError: name 'x' is not defined

而且1并不会被输出,也就是说程序将被中断。如果讲代码修改如下:

try:

print x

exceptNameError:

print "Something is wrong!"

print 1

得到的输出将是:

Something is wrong!

1

可见,我们定义的except会“抓住”NameError类型的语句,并且执行相应的处理代码,而且程序不会被中断。

使用raise

我们可以自己触发异常,例如:

raise IndexError

Python会返回:

Traceback (most recent call last):

File "d:\我的文档\桌面\todo\exep.py", line 1, in

raise IndexError

IndexError

自定义的异常

下面定义了一个MyException类,它继承自Python内置的Exception类。

class MyException(Exception):pass

try:

#some code here

raise MyException

except MyException:

print "MyException encoutered"

结果为:

MyException encoutered

可以在一个except内捕获多个异常:

except (AttributeError, TypeError, SyntaxError):

捕获所有异常

只要在except后面不加任何异常类型,这个except块就可以捕获所有的异常。

except:

捕获异常的继承关系

当我们except Super的时候,同样会捕获到raise Sub的异常。

finally

无论try块是否抛出异常,永远执行的代码。通常用来执行关闭文件,断开服务器连接的功能等等。

class MyException(Exception):pass

try:

#some code here

raise MyException

except MyException:

print "MyException encoutered"

finally:

print "Arrive finally"

结果:

MyException encoutered

Arrive finally

try、except、else

可以在try块里加入else块,代码块将在没有异常被抛出的时候执行:

try:

print "normal code here"

except MyException:

print "MyException encoutered"

else:

print "No exception"

finally:

print "Arrive finally"

结果为:

normal code here

No exception

Arrive finally

raise异常、同时添加数据

raise异常的同时,我们可以添加一些额外的数据,就像下面的例子一样:

class MyException(Exception):pass

try:

raise MyException,", and some additional data"

except MyException,data:

print "MyException encoutered"

print data

断言assert

断言是指期望指定的条件满足,如果不满足则抛出AssertionError异常。例如:

def positive(x):

assert x > 0

print "x"

positive(1)

positive(0)

positive(0)一句将会抛出一个异常。

with/as

with/as语句主要是为了代替try/finally语句、通常用来做一些善后工作或者是清理现场的工作。

with open('test.txt') as myfile:

for line in myfile:

#code here

#code here

当with代码块结束之后,文件将会自动关闭。这是因为返回的对象支持context management protocol。原书598页有关于该协议的讨论,例如如何自定义一个支持该协议、从而支持with语句的类。

python转义例题_笨办法学Python记录--习题37 异常,lambda,yield,转义序列相关推荐

  1. 笨办法学python在线阅读_笨办法学python全集.pdf

    TableofContents 笨办法学Python 1.1 序言 1.2 前言 1.3 简介 1.4 练习0.安装和准备 1.5 练习1.第一个程序 1.6 练习2.注释和井号"#&quo ...

  2. python函数作为参数例题_笨办法学Python 习题 19: 函数和变量

    函数这个概念也许承载了太多的信息量,不过别担心.只要坚持做这些练习,对照上个练习中的检查点检查一遍这次的联系,你最终会明白这些内容的. 有一个你可能没有注意到的细节,我们现在强调一下:函数里边的变量和 ...

  3. python从属关系编号_笨办法学Python 习题 42: 对象、类、以及从属关系

    有一个重要的概念你需要弄明白,那就是"类 (class)" 和"对象 (object)" 的区别.问题在于, class 和object 并没有真正的不同.它们 ...

  4. 笨办法学python pdf 第三版_笨办法学python第三版

    笨办法学python第三版pdf电子书是一本Python学习参考书,是美国程序员Zed A.Shaw编著,通过简单通俗的方法,结合内部的集体,让程序员学懂python,适用于初级学习python编程的 ...

  5. 笨办法学python第五版_笨办法学python PDF下载|笨办法学python第五版 电子版附目录_最火软件站...

    笨办法学Python第五版PDF电子版是专门为初学Python的朋友准备的一款电子图书资料,可以帮助你更好的学习Python编程知识,该电子书每章节都附带了常见问题回答以及练习题目,能够帮助学习者快速 ...

  6. Python入门书籍推荐——《笨办法学Python》

    很多小伙伴在学习Python的道路上,觉得越来越难.今天为小伙伴推荐一本非常适合Python小白的书籍<笨办法学Python>第三版. 在豆瓣有7.8的评分,学习Python的小伙伴千万不 ...

  7. 笨办法学python3进阶篇下载_笨办法学Python 3 进阶篇

    书名:"笨办法"学Python 3:进阶篇 定价:59.0 ISBN:9787115505392 作者: 泽德·A. 肖 版次:第1版 出版时间:2020-06 内容提要: 本书是 ...

  8. 笨方法学 python3进阶篇_笨办法学Python 3 进阶篇

    部分准备知识1 如果不喜欢作者的个人流程怎么办2 如果发现自己太糟糕怎么办2 习题0准备工作3 程序员用的编辑器3 Python3.63 工作终端4 pip和virtualenv的配置4 实验笔记4 ...

  9. 笨办法学python3进阶篇_笨办法学Python 3 进阶篇

    第 一部分 准备知识 1 如果不喜欢作者的个人流程怎么办 2 如果发现自己太糟糕怎么办 2 习题0 准备工作 3 程序员用的编辑器 3 Python 3.6 3 工作终端 4 pip和virtuale ...

最新文章

  1. win10无法装载重装系统iso文件_windows10系统如何安装iso镜像文件
  2. c++ 基本排序算法学习
  3. Typescript Mixins(混合)
  4. 【es】Node与NodeEnvironment的实例化
  5. Prelude CC 2019 for Mac附激活补丁 v8.1.0中文版
  6. 怎么添加网络扫描仪到计算机,MAC如何添加网络扫描仪
  7. Mysql索引失效OR语句
  8. ATSC /DVB SI/PSI 主要的区别
  9. UPNP端口映射简单流程
  10. Flash实例教程:AS3代码简单表现照片底片效果
  11. 显卡的优化以提高计算机性能作用,显卡优化,教您如何设置NVIDIA(英伟达)显卡玩游戏性能更高...
  12. 现代计算机网络的前沿技术,现代计算机网络的前沿技术分析
  13. trian和val结果相差很大。
  14. Excel 2013 如何分列操作
  15. 牛客练习赛41 b 666RPG (01背包)
  16. cassandra 官方wiki
  17. ofo千万人排队退超10亿元押金,被资本和市场抛弃的ofo如何熬过寒冬?
  18. CORDIC算法原理详解及其Verilog实现
  19. 《Feature Pyramid Networks for Object Detection》论文阅读笔记
  20. 超实用, 程序员,提升英文阅读能力

热门文章

  1. 数据库mysql:MySQL软件安装
  2. 第二章 在HTML页面里使用javaScript
  3. 请问诸位大神,Android怎么实现图片转动
  4. VB6-改造ComUnit(免除用例名称注册)
  5. Pycharm 加载pygame解决方案
  6. php json_encode 中文乱码解决方法
  7. 2021人工智能竞赛白皮书:1000场竞赛的深度分析
  8. 深度模型推理在腾讯游戏的应用与实践(王者荣耀、和平精英等均有应用)
  9. 【免费下载】2021年7月热门报告盘点(附热门报告列表及下载链接)
  10. 【报告分享】2020物业行业专题报告-德勤.pdf(附下载链接)