概述
一、try/except语句
作用:用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。
语法:
一个简单的try...except...else的语法
try:
<语句> # 运行别的代码
except <名字>
<语句> # 如果在try部分引发了’name’异常
except <名字>, <数据>:
<语句> # 如果引发了’name’异常,获得附加的数据
else:
<语句> # 如果没有异常发生
可能的结果:
(1)当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)
(2)如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)
(3)如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
综上就是说:try里语句发生异常,try和else里的语句都不会执行,except如果捕获到了异常则执行except里的语句,若没有捕获,异常会被递交到上层的try,或者程序的最上层(这样就会报错并结束程序)。try里语句正常,会执行try和else里的语句。不会执行except的语句。
(1)当使用except不带任何异常类型时,如下:
try:
正常的操作
except:
发生异常,执行这里的代码
else:
如果没有异常执行这里的代码
这种方式也正确,但是不推荐。因为这样我们就没法通过程序识别出具体的异常信息。因为它捕获的是所有的异常
(2)except也可以同时带多种异常类型,如下:
try:
正常的操作
except (Exception1[, Exception2[, ...ExceptionN]]):
发生以上多个异常中的一个,执行这里的代码
else:
如果没有异常执行这里的代码
(3)异常可以带上参数,可作为输出的异常信息参数,如下:
try:
正常的操作
except ExceptionType, Argument:
你可以在这输出Argument的值
分析:
变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。元组通常包含错误字符串,错误数字,错误位置。
例子:
def test(var):
try:
return int(var)
except ValueError, Argument:
print “参数没有包含数字n”, Argument
test(“abc”)
输出结果如下:
参数没有包含数字
invalid literal for int() with base 10: ‘abc’
二、try/finally语句
无论是否发生异常都执行最后的代码
语法:
try:
<语句>
finally:
<语句> # 退出try时总会执行
raise
一个例子:
try:
fh = open(“testfile”, “w”)
try:
fh.write(“测试异常!”)
finally:
print “关闭文件”
fh.close()
except IOError:
print “Error: 没有找到文件或读取文件失败”
分析:
当在try块中抛出一个异常,立即执行finally块代码,finally块中的所有语句执行后,异常被再次触发,并执行except块代码。
三、raise触发异常
可以使用raise语句自己触发异常
raise语法格式如下:
raise [Exception [, args [, traceback]]]
语句中Exception是异常的类型(例如NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是None。最后一个参数可选(平时很少用到),如果存在,是跟踪异常对象。
例子:
一个异常可以是一个字符串,类或对象。python的内核提供的异常,大多数都是实例化的类。
def functionName(level):
if level < 1:
raise Exception(“Invalid level !”, level)
# 触发异常后,后面的代码就不会再执行
为了能够捕获异常,except语句必须有相同的异常来抛出类对象或者字符串。例如我们要捕获以上异常,except语句如下:
try:
正常逻辑
except “Invalid level !”:
触发自定义异常
else:
其余代码
合在一起代码如下:
# 自定义函数
def myFunc(level):
if level < 1:
raise Exception(“Invalid level !”, level)
# 触发异常后,后面的代码就不会再执行
try:
myFunc(0)
except “Invalid level !”:
print 1
else:
print 2
输出为:
Traceback (most recent call last):
File "test.py", line 11, in <module>
myFunc(0)
File "test.py", line 7, in mye
raise Exception("Invalid level !", level)
Exception: ('Invalid level!', 0)
最后
以上就是爱笑煎蛋为你收集整理的python异常处理的全部内容,希望文章能够帮你解决python异常处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复