如何创建一个单独的函数来处理请求库生成的异常



我是python软件开发的新手。我创建了一个脚本,其中包括许多返回请求输出并处理它们生成的异常的函数。函数之一。如下所示:

def ApiResponse(emailHash):
r=None
errorMessage = ""
url = "https://dummy.com" 
try:
r = requests.get(url, timeout = TIMEOUT_LIMIT)
except requests.exceptions.Timeout as e:
errorMessage = "Timeout Error"
except requests.ConnectionError as e:
errorMessage = "ConnectionError"
except requests.RequestException as e:
errorMessage = "Some other Request Exception"
return r 

我有很多这样的函数,可以针对不同的请求返回响应。但是,它们都重复异常处理代码。我想在另一个函数中单独处理异常,这样我就不必重复了。我尝试过类似于传递变量";e";到其他函数,并将其与异常类型进行比较,并相应地返回不同的错误消息,但我似乎无法进行比较,比如说,e=requests.exceptions.Timeout.

我还能做些什么来分离异常处理部分?我的目标是编写一个模块化代码!

您可以使用异常解耦包来获得良好的可读性:

from exception_decouple import redirect_exceptions

def timeout_handler(emailHash, e):
return "Timeout Error"

def default_handler(emailHash, e):
return "Other Error"

@redirect_exceptions(timeout_handler, requests.exceptions.Timeout)
@redirect_exceptions(default_handler, requests.ConnectionError,
requests.RequestException)
def ApiResponse(emailHash):
r=None
url = "https://dummy.com" 
r = requests.get(url, timeout = TIMEOUT_LIMIT)
return r 

我发现的一种方法是将错误类型与错误进行比较。例如在上述情况下。

def exception_handler(e):
if type(e) is requests.exceptions.ConnectTimeout:
return "Timeout Error"
elif type(e) is requests.ConnectionError:
return "ConnectionError"
else:
return "Some other Request Exception"

这应该工作

最新更新