错误和异常处理

处理Python的错误或异常是构建稳定程序的重要组成部分。在数据分析应用中,很多函数只能处理特定的输入。例如,Python的float函数可以将字符串转换为浮点数字,但是对不正确的输入会产生ValueError

float('0.1') # 结果:0.1
float('hello') # 结果:ValueError: could not convert string to float: 'hello'

假设我们想要在float函数运行失败时可以优雅地返回输入参数,我们可以通过将float函数写入一个try/except代码段来实现:

def f(s):
    try:
        return float(s)
    except ValueError:
        return s

f('0.1') # 结果:0.1
f('hello') # 结果:hello

上述代码的意思就是:当float(s)没有错误的时候,会返回float(s),但当出现ValueError的时候,就会返回s本身。

不过上述代码只能处理ValueError的情况,当出现其它报错情况时,同样会报错:

f((1, 2)) # 结果:TypeError: float() argument must be a string or a number, not 'tuple'

这是因为错误类型是TypeError,但我们只设置了ValueError时的处理方式,可使用下面两种方式:

def f(s):
    try:
        return float(s)
    except:
        return s

f((1, 2)) # 结果:(1, 2)

或者

def f(s):
    try:
        return float(s)
    except (ValueError, TypeError): # 括号必不可少
        return s

f((1, 2)) # 结果:(1, 2)

某些情况下,我们可能想要处理一个异常,但是希望一部分代码无论try代码块是否报错都要执行。为了实现这个目的,使用finally关键字,一般用于读写文件:

try:
   f = open("/tmp/output", "w")
   f.write("hello")
finally:
   print("closing file")
   f.close()

不论try中写文件的过程中是否有异常,finally中关闭文件的操作一定会执行。由于finally的这个特性,finally经常被用来做一些清理工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值