分布式系统:在客户端引发服务器端抛出的错误

Distributed system: Raise error thrown on server side on client side

我刚刚开始创建一个分布式系统,现在有一个服务器和一堆客户端。使用的语言是 python,通信是使用套接字和 JSON 完成的。当服务器端发生错误时,我将错误 [​​=25=]-name 和错误参数发送到客户端,如下所示:

     except Exception as e:
         jsonResult = {"error":                                                                                 
                       {   
                           "name":e.__class__.__name__,                                                         
                           "args": e.args                                                                       
                       }                                                                                        
         }                                                                                                      

         jsonResult = json.dumps(jsonResult)                                                                    
         jsonResult += "\n"                                                                                     

         return jsonResult  

然后尝试像这样在客户端提出它:

          errorFunc = decodedReply["error"]["name"]
          args = decodedReply["error"]["args"]
          print (args)

          # Builds and appends the argumentstring to the error class-name.
          errorFunc += '('
          for arg in args:
              # Handles when the argument is a string.
              if isinstance(arg, str):
                  errorFunc += '\'' + arg + '\','
              else:
                  errorFunc += arg + ','

          # Removes the extra ',' from the string before adding the last ')'. 
          errorFunc = errorFunc[:-1] 
          errorFunc += ')'

          # Debugging print.
          print ("Here: " + errorFunc)

          raise exec(errorFunc)

执行此操作时出现错误

TypeError: exceptions must derive from BaseException

根据我在这里阅读的内容:Error exception must derive from BaseException even when it does (Python 2.7)

看来我必须将其声明为 class。无论如何要解决这个问题?

根据python,您提出的问题也不例外:

>>> type(exec("ValueError('ABC')"))
<class 'NoneType'>

您需要重写代码才能拥有:

>>> errorFunc = "ValueError('ABC')"
>>> exec('raise ' + errorFunc)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
ValueError: ABC