Как решить "ECitMatch() получил несколько значений для аргумента 'bdata'"?
Я новичок в использовании bioservices
Пакет Python. Теперь я собираюсь использовать это, чтобы получить PMID для двух цитат, учитывая указанную информацию, и это код, который я пробовал:
from bioservices import EUtils
s = EUtils()
print(s.ECitMatch("pubmed",retmode="xml", bdata="proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|%0Dscience|1987|235|182|palmenberg+ac|Art2|"))
Но возникает ошибка:
"TypeError: ECitMatch() получил несколько значений для аргумента 'bdata'".
Может ли кто-нибудь помочь мне решить эту проблему?
2 ответа
Я думаю, проблема в том, что у вас есть безымянный аргумент (pubmed
); если вы посмотрите на исходный код, вы увидите, что первый аргумент должен бытьbdata
; если вы приводите такие аргументы, как вы, то неясно,bdata
является "pubmed"
или названный аргумент bdata
, поэтому вы получите ошибку.
Вы можете воспроизвести это с помощью этого минимального примера:
def dummy(a, b):
return a, b
dummy(10, a=3)
вернусь
TypeError: dummy() получил несколько значений для аргумента 'a'
Если вы удалите "pubmed"
, ошибка исчезает, однако вывод все еще не завершен:
from bioservices import EUtils
s = EUtils()
print(s.ECitMatch("proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|%0Dscience|1987|235|182|palmenberg+ac|Art2|"))
возвращается
'proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|2014248\n'
поэтому учитывается только первая публикация. Вы можете получить результаты для обоих, используя правильный символ возврата каретки \r
:
print(s.ECitMatch(bdata="proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|\rscience|1987|235|182|palmenberg+ac|Art2|"))
вернусь
proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|2014248
science|1987|235|182|palmenberg+ac|Art2|3026048
Я думаю, вам тоже не нужно указывать retmod
ни база данных (pubmed
); если вы посмотрите исходный код, который я привел выше, вы увидите:
query = "ecitmatch.cgi?db=pubmed&retmode=xml"
так кажется, он всегда использует pubmed
а также xml
.
Здесь две проблемы: синтаксис и ошибка.
Правильный синтаксис:
from bioservices import EUtils
s = EUtils()
query = "proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|%0Dscience|1987|235|182|palmenberg+ac|Art2|"
print(s.ECitMatch(query))
Действительно, базовый сервис, связанный с ICitMatch, имеет только одну базу данных (pubmed) и один формат (xml), поэтому эти 2 параметра недоступны: они жестко запрограммированы. Следовательно, требуется только один аргумент: ваш запрос.
Что касается второй проблемы, о которой говорилось выше и о которой сообщалось на странице проблем с биосервисами, ваш запрос вернет только одну публикацию. Это была проблема, из-за которой специальный символ%0D (вместо возвратной каретки) не интерпретировался корректно запросом URL. Этот символ каретки (\n, \r или%0d) теперь учитывается в последней версии на github или с веб-сайта pypi, если вы используете версию 1.7.5.
Спасибо willigot за то, что заполнили вопрос на странице биосервисов и обратили на него мое внимание.
отказ от ответственности: я главный автор биосервисов