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编辑  收藏  举报

导航