Я создаю полуавтоматический инструмент в Python, использующий pywikibot, для импорта данных из базы данных TOP500 в Wikidata, следуя этому и этому учебному пособию.(Это мой первый раз программирование на Python).
Он работал нормально, пока скрипт не попытается зафиксировать числовое значение внутри единицы (например, Pleiades (Q2442043
) → потребляемая мощность (P2791) → 4407,00 кВт ).Сценарий анализирует числовое значение в единице измерения, затем единица измерения преобразуется в заданный оператор ( кВт → киловатт (Q3320608
) ).Тем не менее, сценарий выдает ошибку (это предупреждение, потому что я обрабатываю ошибки, используя try-кроме) при передаче модуля как URL (строка помощника сущности), а также оператор (QXXXXX):
WARNING: API error modification-failed: Illegal value: https://wikidata.org/wiki/Q79738
Traceback (most recent call last):
File "/mnt/c/Users/Davod/Documents/git/wikidata_top500/core/pywikibot/page.py", line 112, in handle
func(self, *args, **kwargs)
File "/mnt/c/Users/Davod/Documents/git/wikidata_top500/core/pywikibot/page.py", line 4325, in addClaim
self.repo.addClaim(self, claim, bot=bot, **kwargs)
File "/mnt/c/Users/Davod/Documents/git/wikidata_top500/core/pywikibot/site.py", line 1326, in callee
return fn(self, *args, **kwargs)
File "/mnt/c/Users/Davod/Documents/git/wikidata_top500/core/pywikibot/site.py", line 7946, in addClaim
data = req.submit()
File "/mnt/c/Users/Davod/Documents/git/wikidata_top500/core/pywikibot/data/api.py", line 2080, in submit
raise APIError(**result['error'])
pywikibot.data.api.APIError: modification-failed: Illegal value: https://wikidata.org/wiki/Q79738 [messages:[{'name': 'wikibase-validator-not-allowed', 'parameters': ['https://wikidata.org/wiki/Q79738'], 'html': {'*': 'Valor ilegal: <a class="external free" href="https://wikidata.org/wiki/Q79738">https://wikidata.org/wiki/Q79738</a>'}}]; help:See https://www.wikidata.org/w/api.php for API usage. Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes.]
Я загрузил мой проект на GitHub.Соответствующий исходный код находится в функции addClaim()
, , строка 109 .