python异常处理

一、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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值