如果发生异常,我应该提高或冒泡吗?

时间:2016-01-30 18:53:49

标签: python exception

我正在龙卷风应用程序中实现端点,并怀疑如何引发和处理异常。

我有get方法收集所有引发的异常并记录它们。它看起来像这样:

def get(self):
    try:
        req = self.get_request_params()
    except Exception as e:
        self.send_json(status_code=400, status_text=str(e))
        logging.exception(str(e))

这里是get_request_params可能会引发异常:

def get_request_params(self):
    try:
        user_id = UUID(self.get_query_argument("user_id", None))
    except ValueError:
        raise ValueError("Incorrect argument value for user_id = %s" % user_id)

    try:
        from_date = self.get_query_argument("from", default=None)
        datetime.datetime.strptime(from_date, '%Y-%m-%d')
    except ValueError:
        raise ValueError("Incorrect argument value for from_date = %s, should be YYYY-MM-DD" % from_date)
    ...

还有其他请求参数,以相同的方式检查。看起来我正在努力做更多的事情。而不是它我可以有这样的东西:

def get_request_params(self):
    user_id = UUID(self.get_query_argument("user_id", None))
    from_date = self.get_query_argument("from", default=None)
    datetime.datetime.strptime(from_date, '%Y-%m-%d')
    ...

在这种情况下,任何异常都会冒出来并将以get方法处理。但是,我会丢失那些漂亮的信息。

那么,我是否应该如此明确地提出例外情况,或者它是否足以允许事情按原样进行?

1 个答案:

答案 0 :(得分:1)

如果你遇到异常,这意味着你打算对它进行某些事情,即使这些东西只是输出一个自定义日志消息而忽略它或重新提升它。如果您所做的事情是重新提升它,那么您首先应该抓住它。 (此可能表示您捕获的错误类别过于宽泛。)