Biopython Entrez.read() не работает

Я использую пакет Biopython, но у меня возникли проблемы с одной из его функций. Я следую за документацией пакета ( здесь) к письму:

Вот что я попробовал:

from Bio import Entrez
Entrez.email = "myemail@myuniversity"
handle = Entrez.einfo(db = "pubmed")
record = Entrez.read(handle)

и я получаю эту ошибку

 File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/Bio/Entrez/__init__.py", line 367, in read
    record = handler.read(handle)
  File "/usr/local/lib/python2.7/dist-packages/Bio/Entrez/Parser.py", line 184, in read
    self.parser.ParseFile(handle)
  File "/usr/local/lib/python2.7/dist-packages/Bio/Entrez/Parser.py", line 300, in startElementHandler
    raise ValidationError(name)
Bio.Entrez.Parser.ValidationError: Failed to find tag 'DbBuild' in the DTD. To skip all tags that are not represented in the DTD, please call Bio.Entrez.read or Bio.Entrez.parse with validate=False.

и поэтому я сделал то, что рекомендовал переводчик, и сделал следующее:

record = Entrez.read(handle, validate = False)

и это ошибка, которую я получил:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/Bio/Entrez/__init__.py", line 367, in read
    record = handler.read(handle)
  File "/usr/local/lib/python2.7/dist-packages/Bio/Entrez/Parser.py", line 194, in read
    raise NotXMLError(e)
Bio.Entrez.Parser.NotXMLError: Failed to parse the XML data (syntax error: line 1, column 0). Please make sure that the input data are in XML format.  

Есть идеи, почему это не работает?

1 ответ

Решение

Я только что решил эту проблему. В основном, после того, как я

from Bio import Entrez
Entrez.email = "myemail@myuniversity"
handle = Entrez.einfo(db = "pubmed")
record = Entrez.read(handle)

и это дает ошибку, я прямо звонил

record = Entrez.read(handle, validate = False)

который не будет работать, потому что он все еще находится в "состоянии ошибки", поэтому вместо этого снова объявите дескриптор, и он должен работать так:

handle = Entrez.einfo(db = "pubmed")
record = Entrez.read(handle, validate = False)
Другие вопросы по тегам