【问题标题】:Can you suggest how to handle error such as JSONDecoderError?你能建议如何处理 JSONDecodeError 之类的错误吗?
【发布时间】:2013-02-25 13:34:34
【问题描述】:

以前有人问过这个问题,但答案是建议print 这不好。

Python: Handle JSON Decode Error when nothing returned

鉴于此:

class BitbucketError(Exception):
    pass

try:
    response = requests.get('https://bitbucket.org/.......')
    return response.json()['data']

# because JSONDecoderError inherits from ValueError
except (json.JSONDecoderError, ValueError) as e: 
    raise BitbucketError(response.status_code)

没关系。但是如果我要在另一个项目中使用这个模块,我会这样做

# save to dabase, example 1
raw_code = mymodule.bitbucket.file(...)
db.save(raw_code)

# return json back to user (api server, example 2)
raw_code = mymodule.bitbucket.file(...)
return {'data': raw_code}

我确定我想在上面的 sn-p 中捕获异常。但问题是,我应该让原始的传播还是自己定义一个异常?

我正在尝试了解如何正确处理错误,因为错误可能是由 404、405 甚至 500 引起的。

希望这个问题有意义。

【问题讨论】:

    标签: python


    【解决方案1】:

    这在很大程度上取决于第二段代码的上下文。例如,它是否用于您的应用程序中的一些内部自动化?在这种情况下,捕获异常并将类似于 Django 错误邮件(带有完整的堆栈跟踪、变量等)的电子邮件发送给组织中可以处理它的人可能是一个好主意。如果是针对某些最终用户应用程序,您可能希望记录错误(例如到邮件中)并向用户提供某种反馈。在这种情况下,您将希望以不同的方式处理不同的错误代码。

    【讨论】:

    • 谢谢!不用于自动化。它是最终用户。是的,让我们以 Django 为例。在我谈论前端之前,我们在代码中调用bitbucket.find(..)。在那种情况下,我只是让 JSONDecoder 传播或定义自定义一个?我猜人们对用户应用程序的错误感到更快乐。
    • 我认为这在很大程度上取决于错误的类型以及最终用户试图做什么。由于我没有这些信息,我无法回答这个问题。例如,如果用户尝试添加 bitbucket 存储库名称,并且在查找时从 bitbucket 服务器获得 404,则需要以某种方式向最终用户显示“找不到具有该名称的存储库”之类的消息。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2013-08-15
    • 2023-04-09
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    相关资源
    最近更新 更多