Я попытался выполнить следующий код, но xmlrpclib
поднимает исключение:По умолчанию INT значение с XMLRPCLIB
>>> import xmlrpclib
>>> data = """<?xml version="1.0"?>
... <methodCall>
... <methodName>test_method</methodName>
... <params>
... <param>
... <value>
... <int/>
... </value>
... </param>
... </params>
... </methodCall>"""
>>> xmlrpclib.loads(data)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/xmlrpclib.py", line 1141, in loads
p.feed(data)
File "/usr/lib64/python2.7/xmlrpclib.py", line 558, in feed
self._parser.Parse(data, 0)
File "/usr/lib64/python2.7/xmlrpclib.py", line 829, in end
return f(self, join(self._data, ""))
File "/usr/lib64/python2.7/xmlrpclib.py", line 864, in end_int
self.append(int(data))
ValueError: invalid literal for int() with base 10: ''
Если я заменяю <int/>
по <int></int>
, ошибка та же; но с <int>0</int>
исключение не возбуждается. Те же результаты в python3 с xmlrpc.client
.
Я попытался сделать то же самое с PHP, и он работал без каких-либо проблем:
php > $data = '<?xml version="1.0"?><methodCall><methodName>test_method</methodName><params><param><value><int/></value></param></params></methodCall>';
php > print_r(xmlrpc_decode($data));
Array
(
[0] => 0
)
documentation от реализации .NET также подразумевает, что <int/>
будут переведены на 0:
Если член структуры XML-RPC отсутствует, соответствующий член .NET-структуры будет установлен в значение null вместо значения по умолчанию для типа, если был использован тип с ненулевым значением, например null вместо нуля для целого числа.
Это поведение является ошибкой реализации Python?
Я так думаю. Заполните отчет об ошибке. – pacholik
@pacholik Я задаю вопрос, потому что я нашел не настоящую спецификацию об этом самом предмете на официальном сайте XML-RPC. Может быть, реализация PHP просто работает, потому что разработчики решили добавить этот случай к их реализациям, несмотря на спецификации XML-RPC? – julienc
Вижу. Я все равно все равно заполняю его, если PHP и .NET его поддерживают. – pacholik