转自:try与raise用法

try语句是这样工作的:

  首先,运行try子句(在try和except之间的语句)。 
  如果没有发生例外,跳过except子句,try语句运行完毕。 
  如果在try子句中发生了例外错误而且例外错误匹配except后指定的例外名,则跳过try 子句剩下的部分,执行except子句,然后继续执行try语句后面的程序。 
  如果在try子句中发生了例外错误但是例外错误不匹配except后指定的例外名,则此例外被传给外层的try语句。如果没有找到匹配的处理程序则此例外称作是未处理例外,程序停止运行,显示错误信息。 
  try语句可以有多个except子句,为不同的例外指定不同处理。至多只执行一个错误处理程序。错误处理程序只处理相应的try子句中发生的例外,如果同try语句中其它的错误处理程序中发生例外错误处理程序不会反应。一个except子句可以列出多个例外,写在括号里用逗号分开,例如:
... except (RuntimeError, TypeError, NameError):
...     pass
  最后一个except子句可以省略例外名,作为一个通配项。这种方法要谨慎使用,因为这可能会导致程序实际已出错却发现不了。
  try ... except语句有一个可选的else子句,如有的话要放在所有except子句之后。else 的意思是没有发生例外,我们可以把try子句中没有发生例外时要做的事情放在这个子句里。例如:
for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print '不能打开', arg
    else:
        print arg, '有', len(f.readlines()), '行'
        f.close()
  例外发生时可能伴有一个值,叫做例外的参数。参数是否存在及其类型依赖于例外的类型。对于有参数的例外,except在自居可以在例外名(或表)后指定一个变量用来接受例外的参数值,如:
>>> try:
...     spam()
... except NameError, x:
...     print 'name', x, 'undefined'
... 
name spam undefined
  有参数的例外未处理时会在错误信息的最后细节部分列出其参数值。  
  例外处理程序不仅处理直接产生于try子句中的例外,也可以处理try子句中调用的函数(甚至是间接调用的函数)中的例外。如:
8.4 产生例外
  raise语句允许程序员强行产生指定的例外。例如: 
>>> raise NameError, 'HiThere'
Traceback (innermost last):
  File "", line 1
NameError: HiThere
  raise语句的第一个参数指定要产生的例外的名字。可选的第二参数指定例外的参数。  
8.5 用户自定义例外
  程序中可以定义自己的例外,只要把一个字符串赋给一个变量即可。例如: 
>>> my_exc = 'my_exc'
>>> try:
...     raise my_exc, 2*2
... except my_exc, val:
...     print 'My exception occurred, value:', val
... 
My exception occurred, value: 4
>>> raise my_exc, 1
Traceback (innermost last):
  File "", line 1
my_exc: 1
  许多标准模块用这种方法报告自己定义的函数中发生的错误。  
8.6 定义清理动作
  try语句还有另一个finally可选子句,可以用来规定不论出错与否都要执行的动作。例如: 
>>> try:
...     raise KeyboardInterrupt
... finally:
...     print 'Goodbye, world!'
... 
Goodbye, world!
Traceback (innermost last):
  File "", line 2
KeyboardInterrupt
  finally子句不论try子句中是否发生例外都会执行。例外发生时,先执行finally子句然后重新提出该例外。当try语句用break或return语句退出时也将执行finally子句。
  要注意的是,try语句有了except子句就不能有finally子句,有了finally子句就不能有except 子句,不能同时使用except子句和finally子句。需要的话可以嵌套。

try与raise用法相关推荐

  1. Python的raise用法

     学习笔记 1.什么是异常处理 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback, ...

  2. python raise函数_Python raise用法

    有读者可能会问,编写代码时能否手动抛出一个异常吗?答案是肯定的,Python 允许程序自行引发异常,使用 raise 语句即可. 异常是一种很"主观"的说法,以下雨为例,假设大家约 ...

  3. Python中raise用法

    是否可以在程序的指定位置手动抛出一个异常?答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可. 读者可能会感到疑惑,即我们从来都是想方设法地让程序正常运行,为什么还要 ...

  4. Python raise用法(超级详细,看了无师自通)

    当程序出现错误时,系统会自动引发异常.除此之外,Python 也允许程序自行引发异常,自行引发异常使用 raise 语句来完成. 异常是一种很"主观"的说法,以下雨为例,假设大家约 ...

  5. Python raise用法(超级详细,无师自通)

    问题: 是否可以在程序的指定位置手动抛出一个异常?答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可. 你们可能会感到疑惑,即我们从来都是想方设法地让程序正常运行,为 ...

  6. Python raise用法

    在前面章节的学习中,遗留过一个问题,即是否可以在程序的指定位置手动抛出一个异常?答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可. 读者可能会感到疑惑,即我们从来都 ...

  7. oracle raise默认作用,postgreSQL之raise用法

    raise函数 在PostgreSQL中,该函数用于打印字符串,类似于Java中的System.out.println(),Oracle中的dbms_output.put_line(). 在Postg ...

  8. Python raise用法(详细讲解)

    在写代码的过程中,我们是否有这样一个疑问?即是否可以在程序的指定位置手动抛出一个异常?答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可. 可能大家会感到疑惑,即我们 ...

  9. Python3中raise用法

          Python中raise语句支持强制触发指定的异常.       raise语法: raise [EXPRESSION [from EXPRESSION]]       如果raise后未 ...

  10. python raise exception用法_python Exception raise

    异常是指程序中的例外,违例情况.异常机制是指程序出现错误后,程序的处理方法.当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理. Exception类是常用的异常类,该类包括Standa ...

最新文章

  1. .NET 设计规范--.NET约定、惯用法与模式--6.为扩展性而设计
  2. 页面间参数值传递含“%”的处理方法
  3. apache-详细配置文件介绍+多种方式虚拟主机配置
  4. SCCM 2012系列之一 Operations Manager 关键概念
  5. MySQL索引底层原理理解以及常见问题总结
  6. 2021-07-05 倒置链表(Cpp/C)
  7. java交换数组元素_交换数组中的元素(Java)
  8. cassandra随机获取数据_从数据库随机获取数据库
  9. Android Studio 如何修改项目名称
  10. 信通院发布《5G经济社会影响白皮书》:10年内带动16.9万亿总产出
  11. 扩展GridView控件(2) - 复合排序和排序状态提示
  12. 为什么手机里的小爱音响app里搜不到家里的小爱音箱_小爱触屏音箱体验:小爱同学有了屏幕增加功能,是不是你的菜?...
  13. tf15: 中文语音识别【转】
  14. 使用python合并多个pdf文件
  15. HIVE操作自查手册(全)
  16. jquery.fn jquery.extend jquery.fn.extend
  17. 双节重逢之保持对生活的掌控感
  18. 自学之javaWeb
  19. 记录一个问题:$router.push在setTimeout中的使用,显示找不到push
  20. Microsoft Visual Studio + Qt插件编程出现错误error MSB4184问题

热门文章

  1. Python中List,tuple,Dictionary之间的区别
  2. 黑客们成功地在土豆上安装了Linux!
  3. SQL Server - 深入探讨SQL Server 2016新特性之 --- Temporal Table(历史表)
  4. Linux的chkconfig命令详解
  5. PHP读取CSV文件
  6. 关于ASp.NEt方面的好书,不得不看啊!!!
  7. 推介英特尔® 黑带软件开发人员!
  8. 在C#中使用SQL语句什么情况需要使用‘单引号’和“双引号”
  9. git rebase 和 merge的区别
  10. 条件查询时,如果有的输入框不输入,后台应该怎么处理?