Python2.7 异常类总结

本文介绍了Python2.7中的异常处理,包括异常的定义、标准异常类型、如何捕获所有异常、使用BaseException、异常处理逻辑、实例演示、with语句的应用以及如何触发异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、什么是异常

对异常的最好描述是:它是因为程序出现了错误而在正常控制流以外采取的行为。这个行为又分为两个阶段:首先是引起异常发生的错误,然后是检测(和采取可能的措施)阶段。

标准异常

Python内建异常:

异常名称描述
BaseException所有异常的基类
SystemExitpython解释器请求退出
KeyboardInterrupt用户中断执行(通常是输入^C)
上面三个用的极少
Exception常规错误类
StopIteration迭代器没有更多的值
GeneratorExit生成器(generator)发生异常来通知退出
StandardError所有内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零(所有数据类型)
AssertionError断言语句失败
AttributeError对象没有这个属性
EOFError灭有内建输入,到达EOF标记
Environment操作系统错误的基类
IOError输入/输出操作失败
OSError操作系统错误
WindowsErrorWindows系统调动失败
ImportError导入模块/对象失败
LookupError无效数据查询的基类
IndexError序列中没有此索引
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python解释器不是致命的)
NameError未申明/初始化对象(没有属性)
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxErrorPython语法错误
IndentationError缩进错误
TabErrorTab和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode相关的错误
UnicodeDecodeErrorUnicode解码时的错误
UnicodeEncodeErrorUnicode编码时的错误
UnicodeTranslateErrorUnicode转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于被弃用的特征的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告

捕获所有异常

python2.5后,有一个’所有异常之母‘,BaseException。KeyboardInterrupt和SystemExit被从Exception里移出和Exception平级。
这样,当你已经有了一个Exception处理器后,你不必为这两个异常创建额外的处理器。代码会是这样:

try:
'''
except Exception, e:
	# handle read errors

如果你确实需要捕获所有异常,那么你就得使用新的BaseExcetion:

try:
'''
except BaseException, e:
	# handle read errors

TIPS

异常的处理逻辑:发生异常->忽略代码->搜索处理器继续执行->或者抛出异常
不要处理并忽略所有错误

例子

try:
	try:
		ccfile = open('carddata.txt', 'r')
		txns = ccfile.readlines()
	except IOError:
		log.write('no txns this month\n')
finally:
		ccfile.close()

代码片段会尝试打开文件并且读取数据。如果在其中的某步发生一个错误,会写入日志,随后文件被正确的关闭。如果没有错误发生,文件也会被关闭。

try-except-else-finally: 厨房一锅端
try:
	try_suite
except	Exception1:
	suite_for_Exception1
except (Exception2, Exception3, Exception4):
	suite_for_Exception_2_3_and_4
except Exception5, Argument5:
	suite_for_Exception5_plus_argument
except (Exception6, Exception7), Argument67:
	suite_for_Excetions6_and_7_plus_argument
except:
	suite_for_all_other_exceptions
else:
	no_exceptions_detected_suite
finally:
	always_execute_suite

with语句

with保证共享的资源的唯一分配,并在任务结束的时候释放它。比如文件(数据、日志、数据库等等)、线程资源、简单同步、数据库连接,等等。

with context_expr [as var]:
	with_suite

触发异常

raise语句

raise [SomeException[, args [, traceback]]]

当然我们还是能够自己创建异常类的。这个这里就不展开了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值