异常处理思考🤔

源于一行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的都是耍流氓呢

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容