【问题标题】:Reading property from object in exception从异常中的对象读取属性
【发布时间】:2020-04-08 07:07:30
【问题描述】:

我试图在捕获异常时从错误对象中读取属性。错误来自 Celery worker。

下面我展示了 Celery 出错的控制台:

[2019-12-15 16:38:41,442: ERROR/MainProcess] Task api.tasks.sendSms[139dbbbd-df85-4528-a131-973848fb4f80] raised unexpected: AttributeError("'ERR_UNKNOWN' object has no attribute 'Text'")
Traceback (most recent call last):
  File "/share/backend/backendsmsgateapi/api/tasks.py", line 16, in sendSms
    status = smsServiceObject.sendParcicularSms(receiver, template)
  File "/share/backend/backendsmsgateapi/api/smsService.py", line 38, in sendParcicularSms
    state_machine.SendSMS(message)
gammu.ERR_UNKNOWN: {'Text': 'Nieznany błąd.', 'Where': 'SendSMS', 'Code': 27}

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/share/backend/myenv/lib/python3.7/site-packages/celery/app/trace.py", line 385, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/share/backend/myenv/lib/python3.7/site-packages/celery/app/trace.py", line 648, in __protected_call__
    return self.run(*args, **kwargs)
  File "/share/backend/backendsmsgateapi/api/tasks.py", line 20, in sendSms
    message = getattr(error_object, "Text")
AttributeError: 'ERR_UNKNOWN' object has no attribute 'Text'

我的部分代码是:

@shared_task
def sendSms(template, receiver, duration):
    try: 
        smsServiceObject = smsService()
        status = smsServiceObject.sendParcicularSms(receiver, template)
        time.sleep(duration)
    except:
        error_object = sys.exc_info()[1]
        message = getattr(error_object, "Text")
        data = {
                "success" : False,
                "error_info": message,
                "receiver": receiver
        }
        return data

    data = {
        "success": True,
        "receiver": receiver
        }
    return data

如您所见,问题出在:

message = getattr(error_obj, "Text")

但是为什么呢?在控制台对象 ERROR_UKNOWN 具有属性“文本”,值为“Neznany błąd”。 为什么它不起作用?我将不胜感激。

【问题讨论】:

  • 将所有相关代码和错误直接以文本形式发布在这里。
  • 好的,给我一点时间(我拍了照片,因为它在树莓派上)。
  • 好的,我已经从照片更改为从控制台和 IDE 粘贴代码。
  • 你怎么知道error_obj对象有Text属性?
  • 因为:gammu.ERR_UNKNOWN: {'Text': 'Nieznany błąd.', 'Where': 'SendSMS', 'Code': 27} in console print

标签: python django celery


【解决方案1】:

尝试以下方法:

        error_object = sys.exc_info()[1]
        message = error_object.args[0]['Text']
        data = {
                "success" : False,
                "error_info": message,
                "receiver": receiver
        }
        return data

【讨论】:

    猜你喜欢
    • 2010-10-05
    • 2011-09-24
    • 2019-12-06
    • 2018-07-05
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多