Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33001
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 56
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-14 09:59
文章分类

全部博文(5)

文章存档

2017年(5)

我的朋友

分类: Python/Ruby

2017-08-07 17:27:31

程序执行过程中,如果发生错误,比如遇到NameError,ValueError,TypeError等,程序将会抛出异常,并终断程序的执行。
如果不想程序终止,可以捕获这些异常并执行相应的操作。

Python中捕获异常使用的语句如下:

  1. try:
  2.     正常的操作
  3. except exception1:
  4.     如发生异常exception1则执行这个代码块
  5. except exception2 as e:
  6.     如发生异常exception2则执行这个代码块
  7. except (exception3, exception4):
  8.     如发生异常exception3或者exception4则执行这个代码块
  9. except Exception as e:
  10.     print(e)
  11.     发生其他的异常执行这个代码块
  12.     异常的父类,可以捕获所有异常并打印出来
  13. else:
  14.     没有发生异常执行这个代码块
  15. finally:
  16.     总是要执行的代码块
  17.     出现异常时跳出try代码块,并立即执行这个代码块,然后执行异常代码块
  18.     没有发生异常,执行完try代码块后执行这个代码块


try...except举例:


  1. while True:
  2.     try:
  3.         x = int(input("Please enter a number: "))
  4.         break
  5.     except ValueError:
  6.         print("Oops! That was no valid number. Try again ")
执行结果:
Please enter a number: ww
Oops!  That was no valid number.  Try again   
Please enter a number: 
Oops!  That was no valid number.  Try again   
Please enter a number: 89


在这个例子中,如果不使用异常,用户如果输入一个字符串,因为字符串无法转换为int型数据,程序将直接抛出异常并结束。
而使用异常后,程序能捕获这个异常并提示用户数据无效,要求用户再次输入,直到输入正确的数据跳出这个循环。




try...finally举例:


  1. try:
  2.     f = open('myfile.txt', 'w')
  3.     try:
  4.         f.write('the test file')
  5.     finally:
  6.         print('close the file')
  7.         f.close()
  8. except IOError:
  9.     print('Error: 没有找到文件或者文件读取失败')
finally子句不管是否出现异常都会执行。
在这个例子中,如果异常出现在f = open('myfile.txt', 'w')(比如myfile.txt是只读文件),则文件打开失败,执行except语句,提示‘
Error: 没有找到文件或者文件读取失败’,程序退出。
如果异常发生在f.write('the test file'),文件写入失败,执行expect语句后,还会执行finally语句,从而关闭文件。这样不管有没有异常能能够保证打开的文件会被关闭。
这一段代码可以用with...as...语句替代, 这个语句可以自动关闭打开的文件:
  1. with open('myfile.txt', 'w') as f: 
  2.     f.write('the test file')



                                   
阅读(1118) | 评论(0) | 转发(0) |
0

上一篇:迭代器和生成器-学习笔记

下一篇:没有了

给主人留下些什么吧!~~