Python异常处理
一、Python什么是异常
异常即是一个时间,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在python无法正常处理程序时就会发生一个异常。
为了防止用户看到不友好的地方,避免程序的异常退出。
二、Python异常处理
捕获异常可以使用try/except语句。
以下为简单的try...except...else的语法:
try:
<语句> # 运行别的代码
except <名字>:
<语句> # 如果在try部分引发了'name'异常
except <名字>,<数据>:
<语句> # 如果引发了'name'异常,获得附加的数据
else:
<语句> # 如果没有发生异常
三、Python try的工作原理
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
如果try后的语句执行时发生了异常,python就跳回到try,并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句,如果说在try后的语句中发生了异常却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层。这样程序就会结束,并打印一个缺省的错误信息。try子句在执行的过程中没有发生异常,python将执行else子句后的语句,整个控制流结束。
四、python异常实例
1、打开一个文件,在该文件中写入内容,且并未发生异常;
2、它打开一个文件,在该文件中写入内容,但文件没有写入权限,发生了异常。
try:
f = open("test.txt",'w')
f.write("This is my test file for exception handing.")
except IOError:
print("Error:can't find file or read data.")
else:
print("Written content in the file successfully.")
f.close()
print("Done!")
五、Python使用except不带任何异常类型
try:
You do your operations here;
except:
If there is any exception,then execute this block.
else:
If there is no exception then execute this block.
这种方式可以捕获所有的异常,但这样的不能很好的识别异常信息。
六、Python使用excepte带多种异常类型
try:
You do your operations here;
except(Exception1[,Exception2[,...ExceptionN]]]):
If there is any exception from the given exception list,then execute this block.
else:
If there is no exception then execute this block.
七、Python try-finally语句
try-finally语句无论是否发生异常都将执行最后的代码。
try:
<语句>
finally:
<语句> # 推出try时总会执行
raise
注意:可以单独使用except语句或者finally语句,但是两者不能同时使用。else语句也不能与finally语句同时使用。
八、Python try-finally语句
实例:try-finally和try-except嵌套使用,保证无论是否发生异常写完之后及时将文件关闭。
try:
fh = open("testfile", "w")
try:
fh.write("这是一个测试文件,用于测试异常!!")
finally:
print "关闭文件"
fh.close()
except IOError:
print "Error: 没有找到文件或读取文件失败"
当在try块中抛出一个异常,立即执行finally块代码。
finally块中的所有语句执行后,异常被再次触发,并执行except块代码。
参数的内容不同于异常。
异常的参数
一个异常可以带上参数,可作为输出的异常信息参数。
你可以通过except语句来捕获异常的参数,如下所示:
try:
正常的操作
......................
except ExceptionType, Argument:
你可以在这输出 Argument 的值...
变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。
元组通常包含错误字符串,错误数字,错误位置。
实例
以下为单个异常的实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 定义函数
def temp_convert(var):
try:
return int(var)
except ValueError, Argument:
print "参数没有包含数字\n", Argument
# 调用函数
temp_convert("xyz");
以上程序执行结果如下:
$ python test.py
参数没有包含数字
invalid literal for int() with base 10: 'xyz'
try:
1 / 0
except Exception as e:
'''异常的父类,可以捕获所有的异常'''
print("0不能被除")
else:
'''保护不抛出异常的代码'''
print("没有异常")
finally:
print("最后总是要执行我")
posted on 2017-08-10 10:40 sunshine_zhf 阅读(123) 评论(0) 编辑 收藏 举报