Python通用编程规范-05 异常处理

5.1 异常处理

5.1.1 异常捕获后要加 finally

使用try…except…结构对代码作保护时,需要在异常后使用finally…结构保证操作对象的释放
说明:
使用try…except…结构对代码作保护时,如果代码执行出现了异常,为了能够可靠地关闭操作对象,需要使用finally…结构确保释放操作对象。
示例:

handle = open(r"/tmp/sample_data.txt")  # May raise IOError
try:
    data = handle.read()  # May raise UnicodeDecodeError
except UnicodeDecodeError as decode_error:
    print(decode_error)
finally:
    handle.close()  # Always run after try:

5.1.2 异常捕获时需注明异常类型

不要使用except:语句来捕获所有异常

说明:
在异常这方面, Python非常宽容,except:语句真的会捕获包括Python语法错误在内的任何错误。使用except:很容易隐藏真正的bug,我们在使用try…except…结构对代码作保护时,应该明确期望处理的异常。 Exception类是大多数运行时异常的基类,一般也应当避免在except语句中使用。通常,try只应当包含必须要在当前位置处理异常
的语句,except只捕获必须处理的异常。比如对于打开文件的代码,try应当只包含open语句,except只捕获FileNotFoundError异常。对于其他预料外的异常,则让上层函数捕获,或者透传到程序外部来充分暴露问题。

# 错误示例:
# 如下代码可能抛出两种异常,使用"except:"语句进行统一处理时,如果是open执行异常,将在"except:"语句之后handle无效的情况下调用close,报错handle未定义。
try:
    handle = open(r"/tmp/sample_data.txt")  # May raise IOError
    data = handle.read()  # May raise UnicodeDecodeError
except:
    handle.close()

# 正确示例:
try:
    handle = open(r"/tmp/sample_data.txt")  # May raise IOError
    try:
        data = handle.read()  # May raise UnicodeDecodeError
    except UnicodeDecodeError as decode_error:
        print(decode_error)
    finally:
        handle.close()
except (FileNotFoundError, IOError) as file_open_except:
    print(file_open_except)

5.1.3 不在except分支里面的raise都必须带异常

说明:raise关键字单独使用只能出现在try-except语句中,重新抛出except抓住的异常。

# 错误示例:
>>> a = 1
>>> if a==1:
...     raise
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值