Python 标准异常总结(2)

二、异常处理
  python中包含两种异常处理语句,可以使用try...except...finally或者try...except..else语句来处理异常,接下来简单的介绍两种语句的语法以及两者的区别:

try语句原理:

首先,执行try子句(在关键字try和关键字except之间的语句)
如果没有异常发生,忽略except子句,try子句执行后结束。
如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。
一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

try...except..else语法:
try:
  You do your operations here
  ......................
except ExceptionI:
  If there is ExceptionI, then execute this block.
except ExceptionII:
  If there is ExceptionII, then execute this block.
  ......................
else:
  If there is no exception then execute this block. 
   
单个 try 语句可以有多个except语句。 当 try 块包含可能抛出不同类型的异常声明这是有用的
也可以提供一个通用的 except 子句来处理异常(不提倡)
except子句后,可以包括 else 子句。 如果代码在try:块不引发异常则代码在 else 块执行
else是可以正常运行部存在异常的代码,这不需要 try: 块的保护
  try:
  fh = open("testfile", "w+")
  fh.write("This is my test file for exception handling!!")
except IOError:
  print ("Error: can\'t find file or read data")
else:
  print ("Written content in the file successfully")
  fh.close()
   
  正常执行后就会生成testfile文件里面的内容为:This is my test file for exception handling!
  而控制台输出结果如下:
  Written content in the file successfully

用except子句处理多个异常
刚才我们的示例是处理了一个类型的异常,而except可以处理多个类型的异常例如
except(ValueError,ImportError,RuntimeError)这是可以将多个类型的标准错误写成一个元组,但是做个类型容易造成我们队类型的报错分析难度大。
try:
  fh = open("testfile", "r")
  fh.write("This is my test file for exception handling!!")
except (ValueError,ImportError,RuntimeError):
  print ("Error: can\'t find file or read data")
else:
  print ("Written content in the file successfully")
  fh.close()
  结果:
  Error: can't find file or read data  #这里没有报出是那个类型的标准错误。

try-finally子句:
    使用 try: 块. finally 块是必须执行,而不管 try 块是否引发异常或没有。try-finally 语句的语法是这样的。

try:
  You do your operations here;
  ......................
  Due to any exception, this may be skipped.


except ExceptionI:
  If there is ExceptionI, then execute this block.
except ExceptionII:
  If there is ExceptionII, then execute this block.

finally:
1    This would always be executed.

try...except...finally无论try块能否正常的执行,finally是一定会执行的模块。
123456789101112 try:
  fh = open("testfile", "r")
  fh.write("This is my test file for exception handling!!")
except (ValueError,ImportError,RuntimeError):
  print ("Error: can\'t find file or read data")
finally:
  print ("Written content in the file successfully")
  fh.close() #关闭文件
  结果:文件中没有写入内容,
  控制台输出以下内容:
Error: can't find file or read data
Written content in the file successfully

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/65b01a5baba1a4e354b1d3a63f502954.html