Python:异常处理
Python 是面向对象的语言,所以程序抛出的异常也是类。
一、常见的异常类
- NameError:尝试访问一个没有申明的变量
- ZeroDivisionError:除数为 0
- SyntaxError:语法错误
- IndexError:索引超出序列范围
- KeyError:请求一个不存在的字典关键字
- IOError:输入输出错误(比如你要读的文件不存在)
- AttributeError:尝试访问未知的对象属性
- TypeError:传给函数的参数类型不正确,比如给 int 函数传入字符型
二、自定义异常类
尽管内建的异常类已经包括大部分情况,但如果需要创建自己的异常类,可以采用下面的方法:
class CustomException(Exception): # Exception 为所有异常的基类
# 处理异常的代码
三、捕获异常
try:
# 需要进行捕获异常的代码,只有出现异常之前的代码被最终执行
except (Exception1,Exception2,...) as argument:
# 捕获到 (Exception1,Exception2,...) 里的异常才执行本段代码
# argument 是一个异常类的实例,包含异常的具体信息
except:
# 捕获到 (Exception1,Exception2,...) 以外的异常执行本段代码,用 sys 模块的 exc_info() 函数可以获取异常信息
else:
# 如果没有捕获到异常则执行本段代码
finally:
# 无论是否捕获到异常都执行本段代码
上述语句并不都是必须的,譬如 try...except...、try...finally... 或者 try...except...else... 语句都是可行的。我们还可以 用 try...except...else... 代替 if...else...。
四、抛出异常
如果我们想要在自己编写的程序中主动抛出异常,可以采用如下两种方法:
raise Exception(reason)
:Exception 必须是一个异常类的名称。可选项 reason 用来传递异常的信息;assert expression[,reason]
:assert 是断言的关键字。当表达式 expression 为真则什么都不做,否则抛出 AssertionError 异常。reason 提供异常的信息。
五、上下文管理器
由于对象 File 支持上下文管理协议,因此可以采用下面的方法打开文件:
with open('filename') as fp:
# 无论本段代码是否出现异常,文件对象 fp 均能正确关闭
六、Example
import sys
def div(num, den):
print('_________________ (',num,',',den,')\n')
try:
ans = num/den
assert den != num, 'Equal' # 断言:分子分母不相等
den = 'Changed' # 如果执行本语句之前未出现异常,改变 den 的值
if num % 2: # 如果分子为奇数,则抛出异常
raise ValueError('Odd')
except ZeroDivisionError as e:
print('except ... as ...\n\t', e)
except:
print('except\n\t', sys.exc_info())
else:
print('else\n\t', ans)
finally:
print('finally\n\t', den)
div(1,0) # 除数为零,为 ZeroDivisionError 异常类
div(1,1) # 分子等于分母,断言为假,抛出异常
div(2,1) # 无异常
div(3,1) # 分子为奇数,通过 raise 抛出异常
div(3,'x') # 不属于 ZeroDivisionError 的其他异常
_________________ ( 1 , 0 )
except ... as ...
division by zero
finally
0
_________________ ( 1 , 1 )
except
(<class 'AssertionError'>, AssertionError('Equal',), <traceback object at 0x00000000029B42C8>)
finally
1
_________________ ( 2 , 1 )
else
2.0
finally
Changed
_________________ ( 3 , 1 )
except
(<class 'ValueError'>, ValueError('Odd',), <traceback object at 0x00000000029B42C8>)
finally
Changed
_________________ ( 3 , x )
except
(<class 'TypeError'>, TypeError("unsupported operand type(s) for /: 'int' and 'str'",), <traceback object at 0x00000000029B42C8>)
finally
x
Python:异常处理的更多相关文章
- 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 异常处理--raise函数用法
raise语句手工引发一个异常: "raise" [expression ["," expression ["," expression]] ...
- [Python学习笔记][第八章Python异常处理结构与程序调试]
1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...
- python异常处理try,except,else,finally,raise
先看下else的使用: try: ... exception: ... else: ... 只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else 再看下finally: final ...
- Python 异常处理
Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...
- python异常处理的哲学
所谓异常指的是程序的执行出现了非预期行为,就好比现实中的做一件事过程中总会出现一些意外的事.异常的处理是跨越编程语言的,和具体的编程细节相比,程序执行异常的处理更像是哲学.限于认知能力和经验所限,不可 ...
- Python异常处理总结
一.何谓异常处理 在我们调试程序时,经常不可避免地出现意料之外的情况,导致程序不得不停止运行,然后提示大堆提示信息,大多是这种情况都是由异常引起的.异常的出现一方面是因为写代码时粗心导致的语法错误,这 ...
- python异常处理与断言以及日志模块
python异常处理与断言 目录: 1.异常处理 2.断言(assert) 3.日志模块(logging) 4.修改之前的车票信息查询,把日志模块.异常处理加进去 1.异常处理 代码如下: 语法: t ...
- python 异常处理函数--raise
Python 异常处理--raise函数用法 在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称.异常名称标识出具体的类: Python异常处理是那些类的对象 ...
随机推荐
- IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决办法
IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrl ...
- [.ashx檔?泛型处理例程?]基础入门#2....FileUpload上传前,预览图片(两种作法--ashx与JavaScript)
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/20/ashx_beginner_02_fileupload_picture_p ...
- jquery Mobile应用第2课《构建跨平台APP:jQuery Mobile移动应用实战》连载二(简单的QWER键盘)
在jQuery Mobile的布局中,控件大多都是单独占据页面中的一行,按钮自然也不例外,但是仍然有一些方法能够让多个按钮组成一行,比如说在范例6-5中就利用按钮分组的方法使4个按钮并列在一行中,如图 ...
- video 测试
https://segmentfault.com/a/1190000002401961 音量调节https://www.google.com/?gws_rd=ssl#newwindow=1& ...
- 《大话设计模式》ruby版代码:策略模式
需求: 商场收银软件,根据客户购买物品的单价和数量,计算费用,会有促销活动,打八折,满三百减一百之类的. 一,使用工厂模式. # -*- encoding: utf-8 -*- #现金收费抽象类 cl ...
- 利用HttpModule开发asp.net页面、ashx等访问时session失效的统一处理入口
web程序时,当使用session时总会出现失效而报“未将对象引用设置到对象的实例”的http 500错误,本人比较懒,不想每个地方都用try catch处理,就找到个用httpModule统一处理的 ...
- DB2物化表
DB2物化查询表(MQT)是DB2数据库中一类特殊的表 物化表和视图的区别 物化表是一个查询结果集,视图是一个SQL语句. 以下是一个简单例子(说明物化表) 1.创建表,插入测试数据 ----创建表 ...
- iPhone的震动 基于SDK8.0 Swift实现
导入AudioToolbox.framework包 在swift文件中 import AudioToolbox AudioServicesPlaySystemSound(SystemSoundID. ...
- java数据结构和算法------顺序查找
package iYou.neugle.search; public class Sequence_search { public static int SequenceSearch(double[] ...
- Linux 系统Telnet服务
Linux 系统Telnet服务 telnet与ssh相比,安全性能并不高,但是在ssh版本升级或者其他的情况下还是需要开启这一项服务.linux提供服务是由运行在后台的守护进程daemon来执行的, ...