1

Ich habe gerade angefangen, ein verteiltes System zu erstellen, das jetzt einen einzelnen Server und eine Reihe von Clients hat. Die verwendete Sprache ist Python und die Kommunikation erfolgt über Sockets und JSON.Verteiltes System: Fehler auf Serverseite auf Clientseite ausgelöst

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

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

     return jsonResult 

Und dann versuchen, es so auf der Client-Seite zu erhöhen: Wenn ein Fehler auf der Server-Seite tritt ich die Fehlerklassenname und die Fehler Argumente auf der Client-Seite wie folgt senden

  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) 

Als ich das bekomme ich den Fehler

TypeError: exceptions must derive from BaseException 

Von dem, was ich hier lesen: Error exception must derive from BaseException even when it does (Python 2.7)

es sieht so aus, als müsste ich es als Klasse deklarieren. Gibt es da überhaupt etwas, um das zu umgehen?

+0

zeigen Ihnen die Ausgabe von 'print (“ Hier: "+ errorFunc)"? – Saksow

+0

'Hier: ValueError ('ABC')' ist der Ausgang. Der Fehler ist einer, den ich manuell auf der Serverseite ausgelöst habe. –

+0

Überprüfen Sie meine Antwort – Saksow

Antwort

1

Nach Python Sie etwas heben, das ist keine Ausnahme:

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

Sie müssen Ihren Code neu zu schreiben, diese zu haben:

>>> 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 
+1

Das hat super funktioniert! Vielen Dank. –

+0

Kein Problem, Prost! – Saksow

Verwandte Themen