try与raise用法
来源:互联网 发布:淘宝流量突然暴涨两天 编辑:程序博客网 时间:2024/05/02 07:47
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子句(在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子句。需要的话可以嵌套。
阅读全文
0 0
- try与raise用法
- try与raise用法
- python try except finally raise
- python try except finally raise
- 异常处理try...except、raise
- python异常图解:try、raise、except、else、finally块用法简要说明
- signal raise alarm用法
- Python os.makedirs try 以及 raise
- (Python)异常处理try...except、raise
- (Python)异常处理try...except、raise
- Python异常处理try...except、raise
- 异常处理try/raise/assert/with
- Python---异常处理try...except、raise
- (Python)异常处理try...except、raise
- Python异常处理try...except、raise
- excel raise与offset
- kill 与 raise 函数
- signal与raise,sigaction
- 静态局部变量与自动局部变量的区别
- SQL server 修改存储过程
- 深入理解Java的接口和抽象类
- java面试总结
- SPARK-CNN 安装及使用教程
- try与raise用法
- Python自学之路第八步——遍历字典&嵌套
- 使用SecureCRT远程连接虚拟机CentOS(Ip不对连接不了解决方式)
- monosys as 1ddlang语言选型+1ddcodebase实践选型:绿色monodevelope集成常见多语言
- hbase快速入门之---逻辑视图
- 类与封装
- uart and usart
- MyEclipse中的快捷键。
- IFE_js_task03