(更新时间)2021年3月25日 python基础知识(异常的捕获)

278 阅读3分钟

1.异常的捕获

<1>捕获单个异常

# 异常: 程序代码在运行过程中遇到的错误, 程序会报错,会终止程序代码的运行.
# 异常捕获: 是指在程序代码运行过程中,遇到错误, 不让程序代码终止,让其继续运行, 同时可以给使用者一个提示信息
# 并记录这个错误, 便于后期改进
"""
try:
    可能发生异常的代码
except 异常的类型:
    发生异常执行的代码
"""


print('其他的代码......')
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
try:
    num = 10 / int(num)
    print('计算得到的结果是:', num)
except ZeroDivisionError:
    print('你输入有误,请再次输入')

print('其他的代码......')

<2>捕获多个异常

try:
    print('-----test--1---')
    open('123.txt','r') # 如果123.txt文件不存在,那么会产生 IOError 异常
    print('-----test--2---')
    print(num)# 如果num变量没有定义,那么会产生 NameError 异常

except (IOError,NameError): 
    #如果想通过一次except捕获到多个异常可以用一个元组的方式
"""
try:
    可能发生异常的代码
except (异常的类型1, 异常类型2, ...):
    发生异常执行的代码
"""


# print('其他的代码......')
# num = input('请输入一个数字:')
# # ZeroDivisionError: division by zero
# # ValueError: invalid literal for int() with base 10: 'a'
# try:
#     a = int(num)
#     num = 10 / a
#     print('计算得到的结果是:', num)
# except (ZeroDivisionError, ValueError):
#     print('你输入有误,请再次输入')
#
# print('其他的代码......')

"""
try:
    可能发生异常的代码
except 异常类型1:
    发生异常1,执行的代码
except 异常类型2:
    发生异常2,执行的代码
except ...:
    pass
"""
print('其他的代码......')
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
try:
    a = int(num)
    num = 10 / a
    print('计算得到的结果是:', num)
except ZeroDivisionError:
    print('你输入有误,请再次输入')
except ValueError:
    print('输入有误,请输入数字')

print('其他的代码......')

<3>获取异常的信息描述

"""
try:
    可能发生异常的代码
except (异常的类型1, 异常类型2, ...) as 变量名:
    发生异常执行的代码
    print(变量名)
"""


print('其他的代码......')
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
try:
    a = int(num)
    num = 10 / a
    print('计算得到的结果是:', num)
except (ZeroDivisionError, ValueError) as e:
    print('你输入有误,请再次输入', e)

print('其他的代码......')

<4>捕获所有异常

try:
    可能发生异常的代码
except:   # 缺点, 不能获取异常的描述信息
    发生异常执行的代码
    
    
==============
try:
    可能发生异常的代码
except Exception as e:
    发生异常执行的代码
    print(e)
    pass

# Exception 是常见异常类的父类,
ZeroDivisionError --> ArithmeticError --> Exception --> BaseException  ---> object
ValueError --> Exception --> BaseException  ---> object
print('其他的代码......')
num = input('请输入一个数字:')
try:
    a = int(num)
    num = 10 / a
    print('计算得到的结果是:', num)
    f = open('1.txt', 'r')
except Exception as e:
    print('你输入有误,请再次输入', e)

print('其他的代码......')

<4>异常的完整结构

try:
    可能发生异常的代码
except Exception as e:
    发生异常执行的代码
    print(e)
else:
    代码没有发生异常,会执行
finally:
    不管有没有发生异常,都会执行
print('其他的代码......')
num = input('请输入一个数字:')
try:
    a = int(num)
    num = 10 / a
    print('计算得到的结果是:', num)
except Exception as e:
    print('你输入有误,请再次输入', e)
else:
    print('没有发生异常,我会会执行')
finally:
    print('不管有没有发生异常,我都会执行')

print('其他的代码......')