2016-06-28 19 views
2

我有一个尝试/除了我经常在我的代码中重复部分除外部分。这使我相信,将除外部分分成一个函数会更好。将除了部分的try /除外部分隔开功能

下面是我用例:

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

我怎么会去这个逻辑分离成一个功能,所以我可以做简单的东西如:

try: 
    ... 
except: 
    my_error_handling_function(e) 
+0

如何制作自定义错误类,以便您可以捕捉单一类型的错误? –

+0

如果它们的处理方式相同,则不必分别捕获每个异常:'except(api.error.ReadError,api.error.APIConnectionError,Exception)as e:'如果它们的处理方式不同,请勿' t使用一个函数来处理它们。 – chepner

回答

1

只要定义功能:

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

+0

我理解这个部分,但我不确定在我的3个用例的上下文中my_error_handling(e)的样子是什么 –

+0

@MichaelSmith你简单地做'if'语句来检查'if type(e).__ name__ = ='ReadError'' –

+0

这就是我一直在寻找的!请尽快尝试。 –

0

定义你的功能:

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?

+1

您试过/除了没有捕获不分配任何值'e'通过,也没有任何指定的'Exception'类型 –

+0

但是在这一点上,my_error_handling函数如何知道在3种不同的异常情况下执行什么逻辑? –

+0

@MichaelSmith我更新了我的帖子,包括检查 –

0

我会建议重构你的代码,所以try/except块只出现在一个位置。

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