beard的意思-累了
python
异常处理(基础)
2014-01-13 22:57 by
虫师
, 16151
阅读
, 4
评论
,
收藏
,
编辑
之前在学习
python
的时候有整理过
python
异 常处理的文章,
不够简单也不够完整,所
以决定再整理一篇,算做补充。
/fnng/archive/2013/04/28/
python shell
>>> open('','r')
Traceback (most recent call last):
File
IOError: [Errno 2] No such file or directory: ''
打开一个不存在的文件
文件,
当系统找不到
文件时,
就会抛出给我们一
个
IOError
类型的错误,
No such file or directory
:
(没有
这样的文件或目录)
Try...except...
假如,我们已经知道这种类型的错误,那么就可以通过一个 异常扑捉来扑捉这个错误。
我们可以通过
try...except
来接收这个错误。打开文件写入:
try:
open(
except IOError:
pass
再来运行程序就会看不到任何错误,
因为我们用
except
接收了这个
IOError
错误。
pass
表示实现了相应的实现,但什么也不做。
假如我不是打开一个文件,而是输出一个没有定义的变量呢?
try:
aa
except IOError:
pass
显然,在上面的代码中我并没有对
aa
赋值,运行结果:
Traceback (most recent call last):
File
aa
NameError: name 'aa' is not defined
我们已经用
except
接收错误了,为什么错误还是还是抛出来了。如果你细心会发现这
一次的错误类型是
Name Error
,
而我接收类型是
IOError
,
所以要想接收这 个
的错误,
那么需要修改接收错误的类型为
NameError
虽然,
我知道
语句是可能会抛一个
NameError
类型的错误,
虽然接收了这个类型
错误,
但我不知道具体的错误提示信息是什么。
那么,
我能不能把错误信息打 印出来呢?当
然可以:
try:
aa
except
NameError, msg:
msg
我们在接收错误类型的后面定义一个变量
msg
用于接收具体错误信息
,
然后将
msg
接
收的错误信息打印。再来运行程序:
name 'aa' is not defined
现在只打印了一行具体错误信息。
异常的抛出机制:
1
、如果在运行时发生异常,解释器会查找相 应的处理语句(称为
handler
)
.
2
、要是在当 前函数里没有找到的话,它会将异常传递给上层的调用函数,看看那里能不能
处理。
3
、
如果在最外层
(全局
“
main
”
)
还是没有找到的话,
解释器就会退出,
同时打印出
traceback
以便让用户找到错误产生的原因。
注意:虽然大多数错误会导致异常,
但一个异常不一定代表错误,
有时候它们只是一个警告,有时候它们可能是一个终止信号,比如退出循环等。
try...finally...
try...finally...
子句用来表达这样的情况:
我们不管线捕捉到的是什么错误,无论错误是不是发生,这些代码“必须”运行,比如文件
关闭 ,释放锁,把数据库连接返还给连接池等。
创建文件
复制代码
import time
try:
f = file('')
while True: # our usual file- reading idiom
line = ne()
if len(line) == 0:
break
(2)
print line,
finally:
()
print 'Cleaning up...closed the file'
复制代码
运行程序
(
在
windows
命令提示符或
li nux
终端下运行
)
:
复制代码
...$$ python
abc
efg
^CCleaning up...closed the file
Traceback (most recent call last):
File
(2)
KeyboardInterrupt
复制代码
程序读
文件中每一行数 据打印,但是我有意在每打印一行之前用
方法暂停
2
秒钟。这样做的原因是让 程序运行得慢一些。在程序运行的时候,按
Ctrl-c
中断
/
取消程序。< br>
我们可以观察到
KeyboardInterrup t
异常被触发,
程序退出。
但是在程序退出之前,
finally
从 句仍然被执行,把文件关闭。
到目前为止,我们只讨论了如何捕捉异常,那么如何抛出异常呢?
Raise
抛出异常
使用
raise
来抛出一个异常:
#coding=utf-8
filename = raw_input('please input file name:')
if filename=='hello':
raise NameError('input file name error !')
程序要求用户输入一个文件名,如果用户输入的文件名是
hello
,那么抛出一个
NameError
的异常,用户输入
hello
和
NameError
异常之间没有任何必然联系,我只是人为
的通过
rai se
来这样定义,我当然也可以定义称
TypeError
,但我定义的异常类型必须是
python
提供的。
附录:
常见的
python
异常类型
/library/#bltin-exceptions
从 几年前开始学习编程直到现在,
一直对程序中的异常处理怀有恐惧和排斥心理。
之所以这
样,是因为不了解。这次攻
python
,首先把自己最畏惧和最不熟悉的几块内容列出来, 里
面就有「异常处理」这一项。
《
Dive into Pyt hon
》并没有专门介绍异常处理,只是例子中用到的时候略微说明了一下。今
天下载《
Learn Python
》
,直接进异常处理这块。这一部分有四章,第一章讲解异常处理 的一
般使用方法,后面的章节深入地讨论其机制。
我目前只看了第一章,先学会用,以后有必要
的时候再扩展阅读。
python
主要支持五种异常机制,一一列举。
默认的异常处理器
复制代码
代码如下
:
s = 'Hello girl!'
print s[100]
print 'continue'
如果我们没有对异常进行任何预防,
那么在程序执行的过程中发生异常,
就会中断程序,
调
用
python
默认的异常处理器,
并在终端输出异常信息。
这种情况下,
第
3
行 代码不会执行。
beard的意思-累了
beard的意思-累了
beard的意思-累了
beard的意思-累了
beard的意思-累了
beard的意思-累了
beard的意思-累了
beard的意思-累了
本文更新与2021-01-17 06:32,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/522660.html
-
上一篇:MD04例外说明
下一篇:java异常处理考试