美文网首页
异常处理思考🤔

异常处理思考🤔

作者: Gin_714d | 来源:发表于2018-12-14 12:30 被阅读0次

源于一行log:[2018-08-24 10:28:07,042: ERROR/MainProcess] 541137549407: update table error: TypeError: tuple indices must be integers, not str。

看到这行log... 几乎没有办法debug。


def update_product(self, item_id, product_data, where, is_zk_coupon, table_name="coupon_product_v2", update_source_id=False):
        """
        更新coupon_product_v2, 发送消息
        :param data_dict:
        :param is_zk_coupon:
        :param table_name: 更新数据表
        :return: None/coupon_id
        """
        print(json.dumps(product_data), '=' * 20)
        try:
            update_coupon_data = self.get_should_update_product_info(item_id, product_data, is_zk_coupon, update_source_id=update_source_id)
            if not update_coupon_data:
                self.logger.info('item id : {} can not get prod info, maybe start fee or price stuff,raw prod info is {}'.format(item_id, product_data))
                return

            self.ignore_admin_columns(item_id, product_data)

            self.db_write.update(update_coupon_data, where, table_name)
        except Exception as e:
            self.logger.error("{} update table error: {}".format(item_id, e))
            return
        else:
            errorcount.product_update()
            self.logger.info("{} update product success:{}".format(item_id, update_coupon_data))
            tmp_info = self.db_read.select(["coupon_id"], where="item_id={}".format(item_id), table="coupon_product_v2",
                                           result_type='dict')[0]
            coupon_id = tmp_info["coupon_id"]
            # 发送消息
            # self.send_publish('update_cache', 'product', 'u', [coupon_id], data={coupon_id: update_coupon_data})
            DbAcTracker().send_msg('product', 'u', [coupon_id], data={coupon_id: update_coupon_data})
            return coupon_id
  • 在一个try里做了过多逻辑。捕获异常进行了 失败记录,后面的逻辑不清楚具体失败的原因。
  • log 使用了error,但是没有使用exception,使得没有错误堆栈被打印出来。
  • exception的error 没有定义清楚 到底属于哪个异常。捕获了所有异常,使得一些bug被隐藏。并且异常没有被处理。

第一步 :去掉 包罗万象的try

[2018-08-24 10:28:07,119: ERROR/ForkPoolWorker-2] Task zion_task_savedb[4ea693cf-07ec-41e5-b3c5-c30d0004b0cd] raised unexpected: TypeError('tuple indices must be integers, not str',)
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/celery/app/trace.py", line 367, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/celery/app/trace.py", line 622, in __protected_call__
    return self.run(*args, **kwargs)
  File "/root/wwwroot/Zion/tasks/base_zion.py", line 33, in wrapper
    res = func(self, result_info, *args, **kwargs)
  File "/root/wwwroot/Zion/tasks/task_savedb.py", line 294, in run
    coupon_id = self.store_coupon_product(coupon_row, item_value, item_id, item_info['raw_price'])
  File "/root/wwwroot/Zion/tasks/task_savedb.py", line 701, in store_coupon_product
    self.update_product(item_id, item_value, "item_id={}".format(item_id), False, update_source_id=True)
  File "/root/wwwroot/Zion/tasks/common/update_base.py", line 623, in update_product
    self.ignore_admin_columns(item_id, product_data)
  File "/root/wwwroot/Zion/tasks/common/update_base.py", line 604, in ignore_admin_columns
    if rows and (rows[0]['intv2'] >= 5 or rows[0]['improve'] or rows[0]['is_recommend'] or rows[0]['is_prior']):
TypeError: tuple indices must be integers, not str

看到熟悉的报错,顿时心里就有种莫名的熟悉

好的,经过一番斗(单)智(步)斗(调)勇(试)。原来是[图片上传失败...(image-6f65df-1544761802427)]

第二步:分析一下 需要被捕获的异常。

由于这里面的逻辑,并没有已知且正常的异常需要被处理。所以 就直接把try exception去掉了。


知道导致异常的原因,再去捕获特定的异常。

捕获异常的时候,只try 可能出现异常的代码。

需要考虑 异常是否需要被当即处理,还是需要被抛出。

总而言之,言而总之。就是 明白你要捕获的异常是什么再去捕获。捕获异常其实只是打一条log的话,意味着直接忽略异常,那需要考虑的可能就是 这个异常是否应该被忽略。不应该忽略的异常应该被及时的处理。

还有,有数据写入操作但是不打log的都是耍流氓呢

相关文章

  • 异常处理思考🤔

    源于一行log:[2018-08-24 10:28:07,042: ERROR/MainProcess] 5411...

  • Lession13 调试和异常处理

    异常处理 catch的几种写法 自行引发异常throw 思考题 应用程序示例 调试

  • Java重温-通过异常处理错误09

    1.对于异常的处理,之前是没有好好思考的。以前的做法是,基本不自定义异常对象,把系统要求处理的异常记录日志,少量地...

  • 异常处理实践

    文章来源: 陈同学|异常处理实践 本文分享自己关于异常处理的理解。 产品是2B业务,且用户量小,因此以下思考均基于...

  • 同步或异步异常处理

    同步或异步异常处理 同步读取异常处理 异步读取文件异常处理

  • Java 异常

    异常处理机制 异常处理模型:终止模型:当异常发生时,就进入异常处理程序,处理结束并不返回异常发生位置继续执行;恢复...

  • 第十二章:异常处理

    异常处理语法格式: try: ...处理语句 except 异常类型: ...异常处理语句 pytho...

  • Spring MVC 全局统一异常处理(注解方式)

    全局异常处理 对异常处理类增加@ControllerAdvice 增加异常处理方法,使用@ExceptionHan...

  • 异常处理设计文档

    一、异常处理流程说明 在ESB处理过程中,若发生异常,将进入异常流程的处理。一个异常处理流程大致如下: ESB处理...

  • Java异常处理机制

    什么是异常处理机制: 异常处理机制: 让程序发生异常时,按照代码预先设定的异常处理逻辑,针对性地处理异常,让程序尽...

网友评论

      本文标题:异常处理思考🤔

      本文链接:https://www.haomeiwen.com/subject/xfzwhqtx.html