2013-03-10 58 views
0

有人问过这个,但答案是建议print哪个不好。你可以建议如何处理错误,如JSONDecoderError?

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} 

使用这个模块,我相信我要赶在例外上面代码片断。但问题是,我应该让原来的一个传播还是自己定义一个异常?

我想看看如何正确处理错误,因为错误可能是由于404,405,甚至500

希望这个问题是有道理的。

回答

1

这取决于所述第二片的代码的情况下很多。例如,它是否适用于您的应用程序中的一些内部自动化?在这种情况下,最好是捕捉异常并向组织中可以处理它的人发送类似于Djangos错误邮件的邮件(带有完整堆栈跟踪,变量等)。如果是针对某些最终用户应用程序,则可能需要记录错误(例如发送邮件),并为用户提供某种反馈。在这种情况下,您需要以不同的方式处理不同的错误代码。

+0

谢谢!不用于自动化。这是最终用户。是的,让我们来看看Django吧。在讨论前端之前,我们在代码中调用'bitbucket.find(..)'。在那种情况下,我是否让JSONDecoder传播或定义自定义的?我猜测人们会因为错误而感到快乐,直到用户应用程序。 – CppLearner 2013-03-10 09:42:02

+0

我认为这取决于很多错误的类型以及最终用户想要做什么。由于我没有这些信息,我无法回答这个问题。例如,如果用户正在尝试添加一个bitbucket存储库名称,并且在查找时会从bitbucket服务器获得一个404,则需要以某种方式向最终用户提供一条消息,如“无法找到具有该名称的repo”。 – boxed 2013-03-10 10:24:28