【发布时间】:2021-10-18 23:25:52
【问题描述】:
我正在创建一个应用程序,它接收来自用户的命令,验证该命令是否合法,然后执行该命令。
基本流程是在用户发出请求时触发receive_message函数。然后,receive_message 函数将函数请求路由到正确的辅助函数,具体取决于用户请求执行的操作。
我要处理两种异常情况——错误和警告。当无法执行该操作时,应该会发生错误。警告应该在操作可行时出现,但可能不会按照用户预期的方式运行。
现在我通过在辅助函数中引发 CustomError 类来处理错误。例如,
circularity = is_circular_reference(column_id, reference)
if circularity:
raise CustomError()
然后在 receive_message 函数中捕获该异常,该函数具有以下代码
try:
self.handle_request(event)
self.send({success: True})
except CustomError as e:
print(get_recent_traceback())
print(e)
response = {
'event': 'edit_error',
'id': event['id'],
'type': e.type_,
'header': e.header,
'to_fix': e.to_fix
}
self.send(response)
我希望能够以类似的方式处理CustomWarning,不同之处在于提高CustomWarning 不应停止函数的执行。当抛出警告时,整个self.handle_request(event) 应该完成执行,然后我应该捕获警告并将其发送回前端。
例如,我想检查是否应该以与检查错误类似的方式抛出警告:
warning_required = is_warning_required(column_id, reference)
if warning_required:
raise CustomWarning()
然后我想扩展receive_message 函数,使其如下所示:
try:
self.handle_request(event)
self.send({success: True})
except CustomError as e:
print(get_recent_traceback())
print(e)
response = {
'event': 'edit_error',
'id': event['id'],
'type': e.type_,
'header': e.header,
'to_fix': e.to_fix
}
self.send(response)
except CustomWarning as w:
response = {
'event': 'edit_warning',
'id': event['id'],
'type': e.type_,
'header': e.header,
'warning_message': e.warning_message
}
【问题讨论】:
-
只要你
raise,它就会中断当前的控制流,类似于return——调用者在except中做了什么并不重要。handle_request是需要改变的东西,而不是它的调用者。
标签: python error-handling