python异常处理方法
异常是指程序中的例外、违例情况,比如序列的下标越界、打开不存在的文件、空引用异常等。通过捕获异常并进行正确处理,可以提高程序的健壮性。如果没有代码处理异常,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异常处理方法的更多相关文章
- python pip 出现locations that require TLS/SSL异常处理方法
python pip 出现locations that require TLS/SSL异常处理方法 转载 郑才华 发布于2018-03-24 21:41:16 阅读数 51844 收藏 展开 最近在r ...
- python异常处理(基础)
之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充. http://www.cnblogs.com/fnng/archive/2013/0 ...
- Python异常处理 分类: python Raspberry Pi 服务器搭建 2015-04-01 13:22 172人阅读 评论(0) 收藏
一个程序要保持稳定运行必须要有异常处理,本文将简单介绍Python中的try-except..异常处理语句的使用. 该种异常处理语法的规则是: 执行try下的语句,如果引发异常,则执行过程会跳到第一个 ...
- python异常处理try,except,else,finally,raise
先看下else的使用: try: ... exception: ... else: ... 只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else 再看下finally: final ...
- Python 异常处理
Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...
- Python异常处理总结
一.何谓异常处理 在我们调试程序时,经常不可避免地出现意料之外的情况,导致程序不得不停止运行,然后提示大堆提示信息,大多是这种情况都是由异常引起的.异常的出现一方面是因为写代码时粗心导致的语法错误,这 ...
- python 异常处理函数--raise
Python 异常处理--raise函数用法 在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称.异常名称标识出具体的类: Python异常处理是那些类的对象 ...
- Python异常处理回顾与总结
1 引言 在我们调试程序时,经常不可避免地出现意料之外的情况,导致程序不得不停止运行,然后提示大堆提示信息,大多是这种情况都是由异常引起的.异常的出现一方面是因为写代码时粗心导致的语法错误,这种错误在 ...
- Python异常处理与上下文管理器
Python异常处理 异常与错误 错误 可以通过IDE或者解释器给出提示的错误opentxt('a.jpg','r') 语法层面没有问题,但是自己代码的逻辑有问题if age>18: print ...
随机推荐
- vim查找关键字的好方法
当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢? 在vi里可没有菜单-〉查找 不过没关系,你在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然 ...
- Epic Games工程师分享:如何在移动平台上做UE4的UI优化?
转自:https://blog.csdn.net/debugconsole/article/details/79281290 随着技术的不断升级,高性能的引擎逐渐受到越来越多研发商的青睐,UE4就是其 ...
- U3D学习07-插值运算(位移与旋转)
1.Lerp 线性插值计算.匀速移动 2.LerpAngle 线性插值计算.匀速旋转 3.MoveTowards 4.MoveTowardsAngel 5.SmoothStep非匀速移动 6.S ...
- Markdown画各种图表
并不是所有编辑器都支持,比如博客园这个就不支持... 流程图 st=>start: 开始 op=>operation: 首先按个按钮 op2=>operation: 那你从头开始吧 ...
- C,C#,Java:枚举类型
#include <stdio.h> main() { // 枚举默认从0开始,这里指定为1起头 , Tues, Wed, Thurs, Fri, Sat, Sun } day; scan ...
- Json3:使用gson做节点解析
Gson的节点对象:JsonElement : 所有的节点 都是 JsonElement 对象.JsonPrimitive : 基本的数据类型的节点对象,JsonElement的子类JsonNull ...
- python函数的return
return语句用于退出函数,向调用方返回一个表达式.return在不带参数的情况下(或者没有写return语句),默认返回None.None是一个特殊的值,它的数据类型是NoneType.NoneT ...
- contentupe 表的用法
model 代码 from django.db import modelsfrom django.contrib.contenttypes.models import ContentType #dja ...
- django之models模块使用
定义模型 将数据库表定义成类,集成models.Model from django.db import models # Create your models here. class Author(m ...
- LeetCode 1:1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...