Извините за странное название.BioPython: пропуская плохие GID с Entrez.esummary/Entrez.read
Я использую сследование & eSummary, чтобы перейти от
инвентарного номера -> GID -> TaxID
Предположит, что «присоединениях» представляет собой список из 20 номеров на вступление (я 20, в то время потому что это максимум, который позволит NCBI).
я:
handle = Entrez.esearch(db="nucleotide", rettype="xml", term=accessions)
record = Entrez.read(handle)
gids = ",".join(record[u'IdList'])
Это дает мне 20 correspoding GIDs из этих 20 инвентарных номеров.
Далее следуют:
handle = Entrez.esummary(db="nucleotide", id=gids)
record = Entrez.read(handle)
Что дает мне эту ошибку, потому что один из GID, в GID, была удалена из базы данных NCBI:
File ".../biopython-1.52/build/lib.macosx-10.6-universal-2.6/Bio/Entrez/Parser.py", line 191, in endElement value = IntegerElement(value)
ValueError: invalid literal for int() with base 10: ''
Я мог бы попытаться :, за исключением: за исключением того, что бы пропустите остальные 19 GID, которые в порядке.
Мой вопрос:
Как читать 20 записей одновременно с Entrez.read и пропустить те, которые отсутствуют без ущерба для других 20? Я мог бы сделать это за один раз, но это было бы невероятно медленно (у меня есть 300 000 номеров доступа, и NCBI позволяет вам делать 3 запроса в секунду, но на самом деле это больше похоже на 1 запрос в секунду).
любые предложения относительно того, как это сделать? Я пытался ставить: если значение == «»: вернуть перед проблемной линией, но это дает мне ту же ошибку. –
можете ли вы попробовать/исключить вокруг проблемной строки и распечатать значение, когда произойдет исключение? В противном случае я бы использовал отладчик –