我想使用raise
,但不想在屏幕上打印回溯。我知道如何使用try ..catch
来实现这一点,但没有找到使用raise
的方法。
下面是一个例子:
def my_function(self):
resp = self.resp
if resp.status_code == 404:
raise NoSuchElementError('GET'+self.url+'{}'.format(resp.status_code))
elif resp.status_code == 500:
raise ServerErrorError('GET'+self.url+'{}'.format(resp.status_code))
当执行这个时,如果我有一个404,追溯将打印在屏幕上。
Traceback (most recent call last):
File "test.py", line 32, in <module>
print ins.my_function()
File "api.py", line 820, in my_function
raise NoSuchElementError('GET ' + self.url + ' {} '.format(resp.status_code))
这是一个API Package 器,我不希望用户看到回溯,而是看到API响应代码和错误消息。
有办法吗?
5条答案
按热度按时间brvekthn1#
我遇到过一个类似的问题,父类使用
raise
上的异常值来传递消息,但我不想转储回溯。@lejlot提供了一个使用sys.excepthook
的很好的解决方案,但我需要在更有限的范围内应用它。然后,使用它:
这样,如果在块中没有引发异常,则默认异常处理将继续处理任何后续异常:
envsm3lx2#
问题不在于引发什么,而在于当你的程序以异常终止时,python解释器做了什么(它只是打印堆栈跟踪)。如果你想避免它,你应该做的是在你想“隐藏”堆栈跟踪的所有东西周围放置try except块,比如:
另一种方法是修改exeption处理程序
sys.excepthook(type, value, traceback)
,以执行您自己的逻辑,例如你甚至可以对异常
type
进行条件处理,然后执行特定的逻辑,如果它是你的异常类型,否则就退回到原来的异常类型。rkkpypqq3#
修改日期:Alec answer:
用法:
UPD:通过@DrJohnASevenson评论改进代码
6tdlim6h4#
捕获异常,记录它,并向消费者返回一些指示出错的信息(当查询失败时返回200可能会给您的客户端带来问题)。
假的
error_response()
函数可以做任何事情,比如返回一个空响应或一个错误消息。你仍然应该使用正确的HTTP状态代码。在这个示例中,你应该返回一个404。你应该优雅地处理异常,但是你不应该对客户端完全隐藏错误。在
NoSuchElementError
异常的情况下,听起来像是应该通知客户端(错误可能是在他们那端)。cnwbcb6i5#
可以创建一个接受两个值的类;键入并编写自定义异常消息的代码。然后,您可以在try/except语句中传递该类。