python中影响程序正常进行的就是发生了异常,处理异常就是在发生异常时能捕获,这样程序就不会停止。
捕获异常的过程,使用try...except...
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
就是在try后面的语句发生异常时,就会执行第一个匹配该异常的except子句,这样就是异常处理完毕,控制流就会通过整个try语句
如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常:
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print "Error: 没有找到文件或读取文件失败"
else:
print "内容写入文件成功"
fh.close()
$ python test.py
内容写入文件成功
$ cat testfile # 查看写入的内容
这是一个测试文件,用于测试异常!!
下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,但文件没有写入权限,发生了异常:
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print "Error: 没有找到文件或读取文件失败"
else:
print "内容写入文件成功"
fh.close()
$ python test.py
Error: 没有找到文件或读取文件失败
参考链接:http://www.runoob.com/python/python-exceptions.html
循环异常
解决是StopIteration
比如
re = iter(range(5))
for i in range(100):
print re.next()
print 'HaHaHaHa'
这里next超出,整个程序中断
在try程序段中,我们放入容易犯错的部分。我们可以跟上except,来说明如果在try部分的语句发生StopIteration时,程序该做的事情。如果没有发生异常,则except部分被跳过
re = iter(range(5))
try:
for i in range(100):
print re.next()
except StopIteration:
print 'here is end ',i
print 'HaHaHaHa'
0
1
2
3
4
here is end 5
HaHaHaHa
(这里python3 .next改为.__next__)
参考链接:http://www.cnblogs.com/vamei/archive/2012/07/10/2582787.html