Python——异常处理

基础语法

异常是Python对象,表示一个错误。所以,Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

try:
	正常操作
except <异常类型A>:
	发生异常,执行这块代码		#如果在try部份引发了异常类型A
except <异常类型B><数据>:
	发生异常,执行这块代码	       #如果引发了异常类型B,并获得附加的数据
else:
	如果没有异常执行这块代码       #如果没有异常发生
finally:
	退出try时总会执行

异常捕获与处理

我们来看一个简单的示例:

需求:
    1.提示用户输入一个整数
    2.使用8来除以用户输入的数
try:
    num = int(input('请输入一个整数: '))
    result = 8 / num

except ValueError:
    print('输入的值不是合法的整数')

except ZeroDivisionError:
    print('0不能做除数')

except Exception as r:
    print('未知错误 %s' %(r))

else:
    print('结果是:',result)

finally:
    print('运行结束...')

结果:
1.正确结果:
在这里插入图片描述
2.异常处理:
在这里插入图片描述

主动抛出异常

关于主动抛出异常,这里需要使用raise来定义异常类型即抛出内容。

示例:

需求: 提示用户输入密码 如果长度小于8位就抛出异常
def input_passwd():
    passwd = input('请输入密码:')
    if len(passwd) >= 8:
        return passwd
    print('主动抛出异常:')
    raise Exception('长度小于8位')

try:
    input_passwd()
except Exception as EC:
    print(EC)

结果:
在这里插入图片描述

总结

  • except语句不是必须的,finally语句也不是必须的,但是二者必须要有一个,否则就没有try的意义了。
  • except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常,如果异常已经处理就不会再进入后面的except语句。
  • except语句可以以元组形式同时指定多个异常,参见实例代码。
except (ZeroDivisionError, TypeError) as e:
  • except语句后面如果不指定异常类型,则默认捕获所有异常,你可以通过logging或者sys模块获取当前异常。

  • 如果要捕获异常后要重复抛出,请使用raise,后面不要带任何参数或信息

  • 不建议捕获并抛出同一个异常,请考虑重构你的代码。

  • 不建议在不清楚逻辑的情况下捕获所有异常,有可能你隐藏了很严重的问题。

  • 尽量使用内置的异常处理语句来 替换try/except语句,比如with语句,getattr()方法。

以上部分参考:https://juejin.im/entry/5a713192518825732a6dce43

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值