1,try-except
a = b
print(b)
print("woaini")
由于b没有被定义,因此输出结果为
现在加入try-except:
try:
a=b
print(a)
except:
print("error")
print("test")
结果输出为
因此try/except执行过程为:
(1)先执行try代码块, 发现了错误。
(2)执行except代码块。
(3)程序向下执行。
可是在try中发现异常之前的部分会被执行吗?
try:
print("v587")
a=b
print(a)
except:
print("error")
print("test")
输出结果为
由此可知,在发现异常之前的语句是会正常运行的。
我们经常见的两个系统报错为:SyntaxError和NameError
在try/except语句中,可以使用多个except语句
例如:
try:
print("v587")
a=b
print(a)
except SyntaxError:
print("<<<<SyntaxError")
except NameError:
print("<<<<NameError")
print("test")
输出结果为:
可见,当try代码块执行出现异常,在except中匹配到了NameError的异常,则执行了对应except的语句。
若所有except都没有匹配,则相当于try/except语句不存在。
2,try-except-else
在该语句中,try中如果有异常,else是不执行的,例如:
try:
print("v587")
a=b
print(a)
except SyntaxError:
print("<<<<SyntaxError")
except SystemError:
print("<<<<SystemError")
except:
print("bushinaliangzhongcuowu")
else:
print("hahaha")
print("test")
输出为:
如果没有出现异常时,例如:
try:
print("v587")
b=1;
a=b
print(a)
except SyntaxError:
print("<<<<SyntaxError")
except SystemError:
print("<<<<SystemError")
except:
print("bushinaliangzhongcuowu")
else:
print("hahaha")
print("test")
此时except不输出,else输出,如图:
3,try/finally
无论try语句是否有异常,最后都要执行的代码。
例如:
try:
print("v587")
a=b
print(a)
except SyntaxError:
print("<<<<SyntaxError")
else:
print("hahaha")
finally:
print("meiyoule!!")
print("test")
输出结果为:
仅限运行完整套语句后结束,,可以看到最后的print并没有执行。