Python中的异常机制(二)

描述

二、try和except结构

try...一个except结构

这种结构是最常见, 也是最常用的结构

语法结构

try:

 被监控的可能引发异常的语句块

except  BaseException [as  e]:

 异常处理语句块

注意事项:

  • try 块包含着可能引发异常的代码, except 块则用来捕捉和处理发生的异常
  • 执行的时候,如果 try 块中没有引发异常,则跳过 ecept 块继续执行后续代码
  • 执行的时候,如果 try 块中发生了异常,则跳过 try 块中的后续代码,跳到相应的 except 块中处理异常. 异常处理完后,继续执行后续代码

实操代码

def a():

    print("run in a() start! ")

    try:

        num = 1 / 0

    except BaseException as e:

        print("捕获异常之后执行此处代码")

    print("run in a() end! ")

def b():

    print("run in b() start! ")

    a()

    print("run in b() end! ")

def c():

    print("run in c() start! ")

    b()

    print("run in c() end! ")

print("step1")

c()

print("step2")

 

 

try...多个except结构

try...except 的结构可以捕获所有的异常,工作中也很常见. 但是,一般建议尽量捕获可能出现的多个异常(按照先子类后父类的顺序),并且针对性写出异常处理代码 为了避免遗漏可能出现的异常,可以在最后增加 BaseException 。结构如下

语法结构

try:

 被监控的、可能引发异常的语句块

except  Exception1:

 处理Exception1的语句块

except  Exception2:

 处理Exception2的语句块

[...]

except  BaseException:

 处理可能遗漏的异常的语句块

实操代码

try:

    a = input("请输入被除数: ")

    b = input("请输入除数: ")

    result = float(a)/float(b)

    print(result)

except ZeroDivisionError:

    print("异常: 0不能做除数")

except ValueError:

    print("异常: 输入的必须是数值类型!")

except BaseException as e:

    print(e)

    print(type(e))

 

try...except...else结构

在 try...except...else 结构的基础上增加了 else 块 .如果 try 块中没有抛出异常,则执行else 块. 如果 try 块中抛出异常,则执行 except 块,不执行 else 块.

语法结构

try:

 被监控的可能引发异常的语句块

except  BaseException [as  e]:

 异常处理语句块

else:

 没有抛出异常时执行的语句块

实操代码

try:

    a = input("请输入被除数: ")

    b = input("请输入除数: ")

    result = float(a)/float(b)

except BaseException as e:

    print(e)

else:

    print("两数相除, 结果是:", result)

 

 

try...except...finally结构

try...except...finally 结构中, finally 块无论是否发生异常都会被执行, 通常用来释放 try 块中申请的资源

语法结构

try:

 被监控的可能引发异常的语句块

except  BaseException [as  e]:

 异常处理语句块

finally:

 无论是否捕获异常都会执行的语句块

实操代码

try:

    a = input("请输入被除数: ")

    b = input("请输入除数: ")

    result = float(a)/float(b)

except BaseException as e:

    print(e)

else:

    print("两数相除, 结果是:", result)

finally:

    print("我是finally中的语句, 无论发生异常与否, 都执行!")

 

 

实操代码2

try:

    f = open("d:/a.txt",'r')

    content = f.readline()

    print(content)

except BaseException as e:

    print(e)

finally:

    f.close()       #释放资源. 此处也可能会发生异常。若发生异常,则程序终止,不会继续往下执行

print("step4")

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分