异常 try ... expect ...

异常的概念

代码执行产生错误,无法继续

异常的产生

异常处理的目标:代码出现问题,不能让代码停止,继续运行,我们可以来处理这个异常
方案1:
    if判断:未卜先知----要写if,后面跟着的条件是已知的------事前处理
    缺点:如果出现没有预料到底异常,或报错
方案2:人体免疫系统----异常机制
    事后处理:出现问题,我们来处理---解决问题  

异常捕获与处理

方法一:类似if,可以预知异常

while True:
    num = input('请输入一个整数:\n').strip()
    try#捕获下面语句的异常
       
print('100/{} = {}'.format(num,100/int(num)))
    except ZeroDivisionError: #一种已知的异常,其他异常无法捕获
       
print('除数不能为0,请重新输入!')
    except ValueError as error:  #Error异常是一个类函数
       
print('除数为数字,请重新输入!',error)

方法二:

while True:
    num = input('请输入一个整数:\n').strip()
    try#捕获下面语句的异常
       
print('100/{} = {}'.format(num,100/int(num)))
    except Exception: #未知的异常,异常的父类
       
print('异常了,我来处理')

方法三:可以输出异常

while True:
    num = input('请输入一个整数:\n').strip()
    try#捕获下面语句的异常
       
print('100/{} = {}'.format(num,100/int(num)))
    except Exception as ex: #未知的异常,异常的父类
       
print('异常了,我来处理',ex)

方法四:较为通用

while True:
    num = input('请输入一个整数:\n').strip()
    try#捕获下面语句的异常
       
print('100/{} = {}'.format(num,100/int(num)))
    except:
        print('异常了,我来处理')

方法五:同时有已知异常和未知异常的捕获

while True:
    num = input('请输入一个整数:\n').strip()
    try#捕获下面语句的异常
       
print('100/{} = {}'.format(num,100/int(num)))
    except ZeroDivisionError:  # 一种已知的异常,其他异常无法捕获
       
print('除数不能为0,请重新输入!')
    except ValueError as error:  # Error异常是一个类函数
       
print('除数为数字,请重新输入!', error)
    except:
        print('异常了,我来处理')

方法六:追溯详细的日志

import traceback
while True:
    num = input('请输入一个整数:\n').strip()
    try#捕获下面语句的异常
       
print('100/{} = {}'.format(num,100/int(num)))
    except:
        print('异常了,我来处理',traceback.format_exc()) #详细的报错信息,可以添加到日志中

 

例如:

import traceback
try:
    fo = open('xx.txt')
except:
    print('xx.txt文件不存在')

posted @ 2020-04-28 18:38  linma  阅读(554)  评论(0编辑  收藏  举报