При использовании Bio python: NameError: имя 'pubmed_id' не определено, даже если оно было определено ранее? - PullRequest
0 голосов
/ 28 февраля 2020

Итак, я пытаюсь получить некоторые данные из NCBI. Код, который я ранее написал, был переписан гораздо более опытным программистом, но он не возвращал результаты в нужном мне формате, поэтому я сделал некоторые изменения / дополнения:

for plant, disease in plant_disease_list:
    search_query = generate_search_query(plant, disease)
    handle1 = Entrez.esearch(db="pmc", term=search_query, retmax="10")
    record1 = Entrez.read(handle1)
    pubmed_ids = record1.get("IdList")
    if pubmed_id in pubmed_ids=="":
     print("Plant: {} Disease: {} PubmedID: DOI:".format(plant, disease))
    else:

     for pubmed_id in pubmed_ids:
       handle2 = Entrez.esummary(db="pmc", id=pubmed_id)
       records = Entrez.read(handle2)
       for record in records:
          doi = record.get("DOI")
          print("Plant: {} Disease: {} PubmedID: {} DOI: http://doi.org/{}".format(plant, disease, pubmed_id, doi))

, где plant_disease_list - это ранее определенный список. Единственная проблема, с этим кодом я получаю ошибку:

Traceback (most recent call last):
  File "scraperscript_python.py", line 28, in <module>
    if pubmed_id in pubmed_ids=="":
NameError: name 'pubmed_id' is not defined

Если я удаляю if / else l oop и go обратно к обычному вложенному для l oop, я Я не получаю синтаксическую ошибку, но код не печатает нужные мне данные, т.е. он печатает данные только для тех пар "болезнь растений", для которых был найден PMID. Есть идеи, что я могу делать не так?

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Попробуйте это вместо 'if pubmed_id в pubmed_ids == "":'

for plumbed_id in plumbed_ids:
      if plumbed_id == "":
           print("Plant: {} Disease: {} PubmedID: DOI:".format(plant, disease))
else:
    your code here..
0 голосов
/ 28 февраля 2020

Это не определено, когда вы впервые сталкиваетесь с этим оператором if pubmed_id in pubmed_ids=="":.

Только после этого, когда l oop over pubmed_ids был выполнен хотя бы один раз, pubmed_id имеет значение.

Кроме того, if pubmed_id in pubmed_ids=="": не имеет смысла.

...