Day10 Python的异常处理

什么是异常?

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

一般情况下,在Python无法正常处理程序时就会发生一个异常。

异常是Python对象,表示一个错误。

当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行

具体的异常处理:

总结:Python中的异常处理 - SegmentFault 思否https://segmentfault.com/a/1190000007736783异常处理的几种方式:

1、使用try-except方法,可以将指定的可能会发生报错的部分放到内部消化,自身解决错误问题,使得程序继续进行

'''使用try-except方法,将指定报错部分在内部消化吸收,让程序继续执行'''
try:
    a=int(input('请输入一个整数'))
    b=int(input('请输入另一个整数'))
    result=a/b
    print('结果为:',result)
except ZeroDivisionError:
    print('除法中除数不能为0')
print('程序结束finish')
请输入一个整数10
请输入另一个整数0
除法中除数不能为0
程序结束finish

(2)如果在上述情况中输入的不是整数型数字(字母、符号、空格等),则程序依然会报错,因为except里面能消化的是ZeroDivisionError这种情况。就是程序出现的异常和except中要补的异常类型不一样。程序直接终端了

请输入一个整数q
ValueError: invalid literal for int() with base 10: 'q'

(3)当要捕获的异常和出现的异常类型不一致时,可以采用多个except结构,在结构的最后加上BaseException(当不知道会出现什么错误的时候就可以用这个)

***BaseException使用的情况:

a.前面已经有了几种异常捕捉,后面不知道还会出现什么异样,用一个BaseException来囊括其他的异常情况

b.我就是懒,直接用一个BaseException囊括所有异常情况

try:
    a=int(input('请输入一个整数'))
    b=int(input('请输入另一个整数'))
    result=a/b
    print('结果为:',result)
except ZeroDivisionError:
    print('除法中除数不能为0')
except ValueError:
    print('只能输入数字串数据')
print('程序结束finish')
请输入一个整数10
请输入另一个整数qq
只能输入数字串数据
程序结束finish

2、try-except-else方法:如果try部分中有异常,则根据异常的情况执行相应的except部分;如try部分没有异常,则执行else部分

try:
    num1=int(input('请输入一个整数'))
    num2=int(input('请再输入一个整数'))
    result=num1/num2
except ZeroDivisionError:
    print('除法中除数不能为0')
except ValueError:
    print('只能输入数字串数据')   
    # 或者如果这里不知道会出现什么异常时,就可以用BaseException
    '''except BaseException as seem:     这里的as seem是给异常情况起一个别名叫seem
              print('程序内有错误',seem)   #可以输出异常情况
    '''
else:
    print('结果为:',result)
#BaseException语句情况
请输入一个整数10
请再输入一个整数a
程序内有错误 invalid literal for int() with base 10: 'a'   
#这里前面时输出出现异常时的print,后面是这个seem里面带有的东西

3、try...except...else...finally结构

finally语块:无论是否发生异常都会执行,常常用来释放try语块中申请的资源

try:
    num1=int(input('请输入一个整数'))
    num2=int(input('请再输入一个整数'))
    result=num1/num2
except BaseException as seem:
       print('程序内有错误',seem)
else:
    print('结果为:',result)
finally:       #说实话,可有可无
    print('无论程序中是是否出现异常错误,我自己还将会继续被执行')
print('程序结束')
请输入一个整数45
请再输入一个整数5
结果为: 9.0
无论程序中是是否出现异常错误,我自己还将会继续被执行
程序结束

4、traceback模块

使用traceback模块可以打印异常信息,非异常部分继续输出

import traceback
try:
    print('This is a nice day for you to have a picnic')
    print(10/0)
except:     #这里可以可以写具体的异常类型,也可以不写,直接加冒号
    traceback.print_exc()

This is a nice day for you to have a picnic
Traceback (most recent call last):
  File "D:/Python学习/第十一章/demo9 traceback模块.py", line 9, in <module>
    print(10/0)
ZeroDivisionError: division by zero

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值