将 try/except 的 except 部分分离到一个函数中

Separating except portion of a try/except into a function

我有一个 try/except,我在我的代码中经常重复除外部分。这让我相信,将 except 部分分离成一个函数会更好。

以下是我的用例:

try:
  ...
except api.error.ReadError as e:
  ...
except api.error.APIConnectionError as e:
  ...
except Exception as e:
  ...

我该如何将这个逻辑分离成一个函数,这样我就可以做一些简单的事情:

try:
  ...
except:
  my_error_handling_function(e)

只需定义函数:

def my_error_handling(e):
    #Do stuff

...并传入exception对象作为参数:

try:
    #some code
except Exception as e:
    my_error_handling(e)

仅使用通用 Exception 类型将允许您拥有单个 except 子句并在您的处理函数中处理和测试不同的错误类型。

为了检查捕获的异常的名称,您可以通过以下方式获取:

type(e).__name__

里面会打印名字,比如ValueErrorIOError

定义函数:

def my_error_handling(e):
    #Handle exception

并按照您的建议进行:

try:
  ...
except Exception as e:
  my_error_handling_function(e)

您可以通过在函数中获取异常类型 'e' 来处理逻辑。参见:python: How do I know what type of exception occurred?

我建议重构您的代码,使 try/except 块仅出现在一个位置。

例如,带有 send() 方法的 API class 似乎是包含您在问题中描述的错误处理逻辑的合理候选者。