异常是指程序中的例外、违例情况,比如序列的下标越界、打开不存在的文件、空引用异常等。通过捕获异常并进行正确处理,可以提高程序的健壮性。如果没有代码处理异常,Python解释器将输出相关异常信息并终止程序。

Python中处理异常是通过try/except/else/finally语句完成。它们的语法结构下:

try:
Normal execution block
except A:
Exception A handle
except B:
Exception B handle
except:
Other exception handle
else:
if no exception,get here
finally:
print("finally")

说明:

1、try子句中的代码防止可能出现异常的语句。

2、except子句为捕获异常时进行处理的逻辑。except A、except B中的语句表示捕获到异常为A、异常类型为B时针对性处理的逻辑。except表示除去异常类型A、B之外所有其他类型。

3、else子句在try子句中代码执行未发生异常情况下执行。else语句为可选语句。

4、finally子句无论try子句中是否发生异常都会被执行。常用于关闭因异常而不能释放的系统资源。finally子句为可选语句。

5、注意上述try/except A/except B/except/else/finally语句的先后顺序,不能随意调换顺序。

下面通过打开文件的案例来了解一下实现方法。

try:
print "try block"
fp = open('ip.txt', 'r')
except:
print "except block"
print "%s file,please check." % ('ip.txt')
sys.exit(1)
else:
print "else block"
ip_lst = fp.readlines()
fp.close()
finally:
print "finally block"

上述try语句在ip.txt存在和不存在两种情况下执行的结果如下图所示:

通过执行结果对比可以知道,在ip.txt文件存在情况下,执行了try/else/finally中的代码。而在ip.txt不存在情况下,执行try/except/finally中的代码。也就论证了上述说明中的第3/4点描述。案例中代码虽然针对异常进行处理,但是并没有显示关闭被打开的文件资源。修改后的代码如下:

try:
print "try block"
fp = open('ip.txt', 'r')
except:
print "except block"
print "%s file,please check." % ('ip.txt')
sys.exit(1)
else:
print "else block"
ip_lst = fp.readlines()
fp.close()
finally:
print "finally block"
fp.close()

在ip.txt文件不存在情况下执行代码,程序异常中断,提示“NameError: name 'fp' is not defined”。原因是因为try语句中定义的变量的作用域导致的。变量fp只在try语句中有效,属于局部变量。因此,为了使变量fp具有全局性。可以使用try/except语句嵌套的方式完成。修改后的代码如下:

try:
fp = open('ip.txt', 'r')
try:
ip_lst = fp.readlines()
except:
print "read %s fail" % ('ip.txt')
sys.exit()
finally:
print "call internal finall close file"
fp.close()
except:
print "%s file,please check." % ('ip.txt')
sys.exit(1)

最后,通过上述案例描述可以了解try/except/else/finally的基本用法。合理的捕获异常并进行异常处理可以有效提高代码的健壮性。

python异常处理方法的更多相关文章

  1. python pip 出现locations that require TLS/SSL异常处理方法

    python pip 出现locations that require TLS/SSL异常处理方法 转载 郑才华 发布于2018-03-24 21:41:16 阅读数 51844 收藏 展开 最近在r ...

  2. python异常处理(基础)

    之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充. http://www.cnblogs.com/fnng/archive/2013/0 ...

  3. Python异常处理 分类: python Raspberry Pi 服务器搭建 2015-04-01 13:22 172人阅读 评论(0) 收藏

    一个程序要保持稳定运行必须要有异常处理,本文将简单介绍Python中的try-except..异常处理语句的使用. 该种异常处理语法的规则是: 执行try下的语句,如果引发异常,则执行过程会跳到第一个 ...

  4. python异常处理try,except,else,finally,raise

    先看下else的使用: try: ... exception: ... else: ... 只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else 再看下finally: final ...

  5. Python 异常处理

    Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...

  6. Python异常处理总结

    一.何谓异常处理 在我们调试程序时,经常不可避免地出现意料之外的情况,导致程序不得不停止运行,然后提示大堆提示信息,大多是这种情况都是由异常引起的.异常的出现一方面是因为写代码时粗心导致的语法错误,这 ...

  7. python 异常处理函数--raise

    Python 异常处理--raise函数用法 在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称.异常名称标识出具体的类: Python异常处理是那些类的对象 ...

  8. Python异常处理回顾与总结

    1 引言 在我们调试程序时,经常不可避免地出现意料之外的情况,导致程序不得不停止运行,然后提示大堆提示信息,大多是这种情况都是由异常引起的.异常的出现一方面是因为写代码时粗心导致的语法错误,这种错误在 ...

  9. Python异常处理与上下文管理器

    Python异常处理 异常与错误 错误 可以通过IDE或者解释器给出提示的错误opentxt('a.jpg','r') 语法层面没有问题,但是自己代码的逻辑有问题if age>18: print ...

随机推荐

  1. c#day05

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ccc ...

  2. 程序集生成失败 -- 引用的程序集“ThoughtWorks.QRCode”没有强名称,为没有源码的程序集强签名

    如果你写的程序程序集是带签名的,应用了没有签名的程序集,编译就会报下面的错误 引用的程序集“**”没有强名称 进入sdk提示符界面,依次输入如下指令 sn -k ThoughtWorks.QRCode ...

  3. 获取Android文件路径

    Environment.getDataDirectory().getPath() : /data Environment.getDownloadCacheDirectory().getPath() : ...

  4. Submline Text 3插件sublimeTmpl添加新模板

    1.安装 一般安装Package Control 2.插件 添加模板 1).进入Preferences->Browse Packages->SublimeTmpl->template ...

  5. CS229 6.12 Neurons Networks from self-taught learning to deep network

    self-taught learning 在特征提取方面完全是用的无监督的方法,对于有标记的数据,可以结合有监督学习来对上述方法得到的参数进行微调,从而得到一个更加准确的参数a. 在self-taug ...

  6. ERROR: duplicate key value violates unique constraint "xxx"

    在postgresql中,由于为表的主键建立了自增序列,且数据是从正式库拷贝到正式库的,所以报错如下: (主要原因:自增序列中的当前序列号小于真实数据中的最大主键值,因此在新增数据时,会报唯一值的错误 ...

  7. mysql 存储过程动态拼接sql并执行赋值

    )) BEGIN ## 定义变量 ,) ; ## @表示全局变量 相当于php $ ## 拼接赋值 INTO 必须要用全局变量不然语句会报错 SET @strsql = CONCAT('SELECT ...

  8. python中的partition、rpartition

    partition()从左向右寻找,以字符串中的某个元素为中心将左右分割共分割成三个元素并放入到元组中 partition()从右向左寻找,以字符串中的某个元素为中心将左右分割共分割成三个元素并放入到 ...

  9. hadoop/hdfs/yarn 详细命令搬运

    转载自文章 http://www.cnblogs.com/davidwang456/p/5074108.html 安装完hadoop后,在hadoop的bin目录下有一系列命令: container- ...

  10. 1. 配置win7下odbc数据源找不到数据库驱动的问题

    win7下ODBC数据源DB2的链接 直接在控制面板---管理工具----数据源(ODBC) 打开数据源配置,发现只有SQLServer的驱动,其他的都没有了. 解决方法是C:\Windows\Sys ...