跳至主要內容

try_except基本结构

刘春龙原创...大约 3 分钟Python教程文档

try...一个 except 结构

try...except是最常见的异常处理结构。结构如下:

try:
    被监控的可能引发异常的语句块
except BaseException [as e]:
    异常处理语句块
  • try 块包含着可能引发异常的代码,except 块则用来捕捉和处理发生的异常。

  • 执行的时候,如果 try 块中没有引发异常,则跳过 ecept 块继续执行后续代码;

  • 执行的时候,如果 try 块中发生了异常,则跳过 try 块中的后续代码,跳到相应的 except 块中处理异常;异常处理完后,继续执行后续代码。

测试简单的 0 不能做除数异常

try:
    print("step1")
    a = 3 / 0
    print("step2")
except BaseException as e:
    print("step3")
    print(e)

print("step4")

执行结果为: step1 、 step3 、 division by zero 、 step4

循环输入数字,如果不是数字则处理异常;直到输入 88,则结束循环。

while True:
    try:
        x = int(input("请输入一个数字:"))
        print("您入的数字是", x)
        if x == 88:
            print("退出程序")
            break
    except:
        print("异常:输入的不是一个数字")

try...多个 except 结构

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

try:
    被监控的、可能引发异常的语句块
except Exception1:
    处理Exception1的语句块
except Exception2:
    处理Exception2的语句块
...
except BaseException:
    处理可能遗漏的异常的语句块
try:
    a = input("请输入被除数:")
    b = input("请输入除数:")
    c = float(a) / float(b)
    print(c)

except ZeroDivisionError:
    print("异常:除数不能为0")
except TypeError:
    print("异常:除数和被除数都应该为数值类型")
except BaseException as e:
    print(e)
    print(type(e))

try...except...else 结构

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

try:
    a = input("请输入被除数:")
    b = input("请输入除数:")
    c = float(a) / float(b)
except BaseException as e:
    print(e)
else:
    print("除的结果是:", c)

如上代码,发生异常执行 except 块,没有异常执行 else

try...except...finally 结构

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

try:
    a = input("请输入一个被除数:")
    b = input("请输入一个除数:")
    c = float(a) / float(b)
except BaseException as e:
    print(e)
else:
    print(c)
finally:
    print("我是finally中的语句,无论发生异常与否,都执行!")

print("程序结束!")

读取文件,finally中保证关闭文件资源

try:
    f = open("d:/a.txt", "r")
    content = f.readline()
    print(content)
except BaseException as e:
    print(e)
finally:
    f.close()  # 释放资源。此处也可能会发生异常。若发生异常,则程序终止,不会继续往下执行

print("step4")
上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7