Я только начал создавать распределенную систему, в которой теперь есть один сервер и множество клиентов. Используемый язык - это python, и связь выполняется с помощью сокетов и JSON. При возникновении ошибки на стороне сервера я посылаю классовое имя ошибки и аргументы об ошибках на стороне клиента, как это:Распределенная система: взломать ошибку на стороне сервера на стороне клиента
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)
похоже, что я должен объявить его как класс. Есть ли все равно, чтобы обойти это?
Вы можете показать вывод 'печати (» Здесь: «+ errorFunc» '? – Saksow
'Здесь: ValueError ('ABC')' - это выход. Ошибка - это то, что я поднял вручную на стороне сервера. –
Проверьте мой ответ – Saksow