python异常类封装_python优雅处理异常

背景

开发过程中经常会将通用的功能模块化,比如db操作封装为db_utils。那么问题来了,如果是在一个通用模块的处理中,出错了该如何处理。不同语言有不同的异常处理机制,比如golang和lua是将错误码和错误信息返回到上一层处理,但是python有更优雅的模式, 就是直接抛出异常

认识异常

1.常见的异常有Exception(常规错误的基类)、ZeroDivisionError(除零)、RuntimeError(一般的运行时错误)等,更多异常可以查看:https://www.runoob.com/python/python-exceptions.html

异常的捕获一般都是通过try...exception...else...finally...方式处理异常

自定义异常

实践

# coding: utf-8

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

class MyError(Exception):

def __init__(self, value):

self.value = value

def __str__(self):

return repr(self.value)

def create_error(name):

if len(name) > 5:

raise MyError("name of item is too long")

elif len(name) > 0:

raise Exception(u"抛出一个Exception异常")

else:

raise RuntimeError(u"抛出一个RuntimeError异常")

return name + " is created!"

def raise_my_err_test(name="sharpen"):

try:

create_error(name)

except MyError as e:

print("caught my error, error= %s" % str(e).decode("utf-8"))

print str(e).decode("unicode_escape")

except Exception as e:

print "cat exception error = ", e

def error():

raise ValueError("oops!")

def catch_error_modify_message():

try:

error()

except ValueError:

print "Caught!"

error_type, error_instance, traceback = sys.exc_info()

error_instance.args = (error_instance.args[0] + " ",)

raise error_type, error_instance, traceback

if __name__ == "__main__":

raise_my_err_test()

总结

1.通过抛出异常的方式表达错误更Pythonic, 看具体的使用场景,如果出现异常需要返回然后终结的场景,则不必层层网上传递和判断,直接向上层抛出异常的方式。

2.抛出异常可以在捕获的逻辑里进行记录处理,然后通过raise继续向上抛出异常

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值