Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在Python中重构并尝试除去代码块_Django_Api_Try Catch_Refactoring_External Application - Fatal编程技术网

Django 在Python中重构并尝试除去代码块

Django 在Python中重构并尝试除去代码块,django,api,try-catch,refactoring,external-application,Django,Api,Try Catch,Refactoring,External Application,目前,我的应用程序正在使用几个外部API,这些函数可能会引发某种错误,我希望了解各种情况,不要使我的应用程序崩溃。在下面的代码中,您可以看到我的函数,使用slack api,这只是一个示例,而不是真正的示例,您可以看到我如何创建一个空间,给出名称和电子邮件。该函数可以返回多个错误,如APIRROR、TypeError。。。等等 您还可以看到,该文件中的所有函数都可能引发一些错误,因此它正在使用try和except,并尝试不破坏我们的应用程序。在Exception部分,我不想做任何特殊的事情,只需

目前,我的应用程序正在使用几个外部API,这些函数可能会引发某种错误,我希望了解各种情况,不要使我的应用程序崩溃。在下面的代码中,您可以看到我的函数,使用slack api,这只是一个示例,而不是真正的示例,您可以看到我如何创建一个空间,给出名称和电子邮件。该函数可以返回多个错误,如APIRROR、TypeError。。。等等

您还可以看到,该文件中的所有函数都可能引发一些错误,因此它正在使用try和except,并尝试不破坏我们的应用程序。在Exception部分,我不想做任何特殊的事情,只需返回错误,或者我不知道,引发一个自定义错误。在将来,如果我能在出现问题时将该任务排队,那就太酷了

slack_client.py

def创建_空间: 尝试: slack_api.create.spacename='spacename',email=电子邮件 除了…: ... def delete_空间: 尝试: slack\u api.delete.spaceid=space\u id 除了…: ... 我想重构try-and-except部分,因为我不想在所有slack_客户机类期间复制和粘贴try-and-except,但是如果连接断开,或者某个参数被写入,slack API将向我发出一个错误

我曾想过创建一个类,在try-and-catch中运行每个函数,但这有点奇怪,我会去掉参数部分,比如spaceName='spaceName',我认为这非常酷和清晰

def execute_func,*参数: 尝试: 函数 除……外: ...
所以,我想为这种情况提供一些帮助,因为处理外部API并不总是很容易。。。目前使用2个外部API时,您可以捕获抛出的任何异常,并将其捕获到要记录或引发的变量中。您甚至可以提出自己的自定义异常。像这样的方法应该会奏效:

首先创建您的异常:

类CustomSlackExceptionException: 通过 然后在调用的API引发某些异常时引发它:

尝试: slack_api.create.spacename='spacename',email=电子邮件 例外情况除外,如e: 版画 引发CustomSlackExceptionCustom错误消息!
现在,您可以捕获异常并根据需要进行处理。

在前世我使用VAX/VMS,还记得发现LIB$SIG______RET将信号转换为返回值时的巨大乐趣。您可以在Python的不多行中按照您指定的行完全执行相同的操作

def execute_func(func, *args, **kwargs):
  try:
     result = func( *args, **kwargs)
     return (True, result)

  except Exception as exc:
       return ( False, exc)
用法

result = execute_func( func, a1, a2, ... k1=v1, k2=v2, ...)
if  result[0]:
    func_result = result[1] # if it's  useful
    ...
else:
     # it went wrong, deal with the exception
     caught_exception = result[1]
     print( caught_exception)