异常是指程序中的例外、违例情况,比如序列的下标越界、打开不存在的文件、空引用异常等。通过捕获异常并进行正确处理,可以提高程序的健壮性。如果没有代码处理异常,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. MySQL分布式实现ID自增

    由于数据量以及IO效率的因素,很多项目对数据支持的数据库会采取分库分表的方式.使用了分库分表之后需要解决的一个问题就是主键的生成.多个表之间的主键就不能用数据库本身的自增主键来支持,因为不同表之间生成 ...

  2. orcale 函数wm_concat不存咋lob值使用zh_concat 替换

    create or replace TYPE zh_concat_im AUTHID CURRENT_USER AS OBJECT ( CURR_STR VARCHAR2(32767), STATIC ...

  3. [SQL]SQL中EXISTS的用法

    比如在Northwind数据库中有一个查询为SELECT c.CustomerId,CompanyName FROM Customers cWHERE EXISTS(SELECT OrderID FR ...

  4. The Kernel Boot Process.内核引导过程

    原文标题:The Kernel Boot Process 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下.一来自己 ...

  5. Android 6.0动态申请权限时,权限框闪一下就消失的问题;

    Android 蓝牙BLE开发需要位置权限,不然扫描不到周围的蓝牙信息: 位置权限申请: if (Build.VERSION.SDK_INT < 23){return;} //判断是否有权限 i ...

  6. solr7.4 tomcat环境下搭建(windows)

    -版本solr-7.4.0 -环境 Windows  jdk1.8 -启动方式:部署在apache-tomcat-8.5.28,以下简称Tomcat 1. 将solr-7.4.0\server\sol ...

  7. windows 下安装 docker

    1. 使用阿里云的镜像进行安装: http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ 2. 安装完成后点击图标 “Dock ...

  8. day2作业(基本数据类型,语法)

    #coding:utf-8 '''1.写代码实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!实现用户输入用户名和密码,当用户名为 seven 且 ...

  9. 关于 java jdk 环境变量的配置

    最近在学习java , 关于java 环境变量的配置,我想总结一下自己在这方面的经验,可供大家参考: 右键单击“我的电脑” --->"属性” ---> "高级属性设置& ...

  10. list 列表 和一些操作方法

    1. 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 列表存在索引和切片. 和字符串是一样的. 2. 相关的增删改查操作(重点) 添 ...