本节主要介绍Python中异常处理的原理和主要的形式。

1、什么是异常

Python中用异常对象来表示异常情况。程序在运行期间遇到错误后会引发异常。如果异常对象并未被处理或捕获,程序就会回溯终止执行。

2、抛出异常

raise语句,raise后面跟上Exception异常类或者Exception的子类,还可以在Exception的括号中加入异常的信息。

>>>raise Exception('message')

注意:Exception类是所有异常类的基类,我们还可以根据该类创建自己定义的异常类,如下:

class SomeCustomException(Exception): pass

3、捕捉异常(try/except语句)

try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

一个try语句块中可以抛出多个异常:

1 try:2 x = input('Enter the first number:')3 y = input('Enter the second number:')4 print x/y5 exceptZeroDivisionError:6 print "The second number can't be zero!"

7 exceptTypeError:8 print "That wasn't a number, was it?"

一个except语句可以捕获多个异常:

1 try:2 x = input('Enter the first number:')3 y = input('Enter the second number:')4 print x/y5 except(ZeroDivisionError, TypeError, NameError): #注意except语句后面的小括号6 print 'Your numbers were bogus...'

访问捕捉到的异常对象并将异常信息打印输出:

1 try:2 x = input('Enter the first number:')3 y = input('Enter the second number:')4 print x/y5 except(ZeroDivisionError, TypeError), e:6 print e

捕捉全部异常,防止漏掉无法预测的异常情况:

1 try:2 x = input('Enter the first number:')3 y = input('Enter the second number:')4 print x/y5 except:6 print 'Someting wrong happened...'

4、else子句。除了使用except子句,还可以使用else子句,如果try块中没有引发异常,else子句就会被执行。

1 while 1:2 try:3 x = input('Enter the first number:')4 y = input('Enter the second number:')5 value = x/y6 print 'x/y is', value7 except:8 print 'Invalid input. Please try again.'

9 else:10 break

上面代码块运行后用户输入的x、y值合法的情况下将执行else子句,从而让程序退出执行。

5、finally子句。不论try子句中是否发生异常情况,finally子句肯定会被执行,也可以和else子句一起使用。finally子句常用在程序的最后关闭文件或网络套接字。

1 try:2 1/03 except:4 print 'Unknow variable'

5 else:6 print 'That went well'

7 finally:8 print 'Cleaning up'

6、异常和函数

如果异常在函数内引发而不被处理,它就会传递到函数调用的地方,如果一直不被处理,异常会传递到主程序,以堆栈跟踪的形式终止。

deffaulty():raise Exception('Someting is wrong!')defignore_exception():

faulty()defhandle_exception():try:

faulty()exceptException, e:print 'Exception handled!',e

handle_exception()

ignore_exception()

在上面的代码块中,函数handle_exception()在调用faulty()后,faulty()函数抛出异常并被传递到handle_exception()中,从而被try/except语句处理。而ignare_exception()函数中没有对faulty()做异常处理,从而引发异常的堆栈跟踪。

注意:条件语句if/esle可以实现和异常处理同样的功能,但是条件语句可能在自然性和可读性上差一些。

在python中、如果异常并未被处理或捕捉_7、Python-异常相关推荐

  1. python中ifelifelse用在什么结构_详解Python if-elif-else知识点

    有的时候,一个 if - else - 还不够用.比如,根据年龄的划分:条件1:18岁或以上:adult 条件2:6岁或以上:teenager 条件3:6岁以下:kid Python if-elif- ...

  2. python字符串能减吗_在python中减去两个字符串(Subtract two strings in python)

    在python中减去两个字符串(Subtract two strings in python) 我应该计算两个不同列表的元素之间的差异. 这是我的代码: import operator a = ['5 ...

  3. python中superclass是什么_深度解析并实现python中的super(转载,好文)

    大神半个月的成绩,让我看的叹为观止,建议看原帖地址,会让你对Python的描述符有更强的认识. 原文链接:https://blog.csdn.net/zhangjg_blog/article/deta ...

  4. python中的常量可以修改吗_深入理解Python变量与常量

    变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内存区域,常量一旦被初始化就不能被 ...

  5. python中for无限循环_关于循环:在Python中从1循环到无穷大

    在C语言中,我会这样做: 1 2 3 4int i; for (i = 0;; i++) if (thereIsAReasonToBreak(i)) break; 如何在Python中实现类似的功能? ...

  6. 在python中、如果异常并未被处理或捕捉_python异常处理(一)

    Python的异常处理能力是很强大的,可向用户准确反馈出错信息.在Python中,异常也是对象,可对它进行操作.所有异常都是基类Exception的成员.所有异常都从基类Exception继承,而且都 ...

  7. 在python中、如果异常并未被处理或捕捉_Python异常处理总结

    本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下: 1. 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果 ...

  8. python中监控错误的语句_Python学习_07_错误、异常

    地毯式地过语法终于快要结束了... Python中的常见异常 1.NameError:尝试访问一个未初始化的变量 2. ZeroDivisionError:除数为0 3. SyntaxError:Py ...

  9. python中try和except语句语言导入包吗_Python异常处理中try与except用法的案例

    Python异常处理中try与except用法的案例 发布时间:2020-11-03 09:44:36 来源:亿速云 阅读:85 作者:小新 小编给大家分享一下Python异常处理中try与excep ...

最新文章

  1. winform TreeView 节点选择
  2. Python和xml简介
  3. easyui 通用的datagrid中如何带有查询条件分页
  4. Cloud for Customer的前端如何判断自己是运行在PC浏览器还是移动设备里
  5. python教材答案第四章_python核心编程课后习题解答第四章
  6. java中的ioc和aop_IOC和AOP分别是什么?如何理解?
  7. Linux上的tomcat版本升级
  8. 推荐系统之GBDT+LR
  9. 电脑PHP动画制作画板,Canvas在线画图—简单制作一个画板
  10. flutter 如何获取屏幕的尺寸
  11. mysql设置bufferpool_mysql修改buffer_pool大小
  12. 通过url给action传中文参数乱码解决方案
  13. 手机抓取蓝牙日志btsnoop的方法汇总(Android一直补充中)
  14. php做网站需要注意什么,浅谈新手做网站应该注意的问题
  15. 【信号采集】基于FPGA的高速信号采集系统
  16. 科技向“实”万物生长,2023年云计算五大技术趋势展望
  17. 点源声场的MATLAB仿真
  18. 最常见的 SQL 查询错误 - 第二章节
  19. 设置web页面鼠标样式
  20. uc云观媒体服务平台_UC云观自媒体为什么没有阅读量?

热门文章

  1. 在Ubuntu下进行MongoDB安装步骤
  2. Meta:绝对没有威胁要离开欧洲市场
  3. 雷军:智能制造将进一步带动中国企业在全球市场的全面崛起
  4. 三年白干!程序员因违反《竞业协议》赔偿腾讯97.6万元,返还15.8万元
  5. B站处罚百万粉丝UP主LexBurner:封禁账号 起诉追究法律责任
  6. 被骂十几年,躺赚上千亿!这个“土匪”行业,还能浪多久?
  7. 爱库存:已实名举报唯品会不正当竞争行为
  8. 5G商用将满一年,6G研发开始了...
  9. 称对方攀附使用近似商标 “汽车之家”起诉索赔500万
  10. 小米10官宣首发骁龙865,小米6“钉子户”可以考虑换机了