2017-02-16 6 views
0

У меня есть следующий класс со статическим методом:Метод выполняется дважды в питоне

class Helper: 
    @staticmethod 
    def LookForCuiInLocal(disease, language): 
     conn = mysql.connector.connect(stuff here) 

     cursor = conn.cursor(buffered=True) 

     findLocalQuery = ("SELECT umls_concept_id from translation WHERE source_text = '{}'".format(disease)) 
     print("hey") 

     try: 
      cursor.execute(findLocalQuery) 
      resultList = cursor.fetchone()[0] 
      cursor.close() 
      conn.close() 
      return resultList 
     except (mysql.connector.Error, TypeError) as e: 
      print("Error when finding local CUI : {}".format(e)) 
      return None 

print(Helper().LookForCuiInLocal("paradentose", "da")) 

У меня есть база данных, где я выполнить запрос и он может возвращать строку мне нужно. Если он не содержит строку, метод не работает и возвращает None.

я получаю следующий результат:

hey 
c0031099 
hey 
c0031099 

Почему метод выполняется два раза? Надеюсь, кто-то может мне помочь.

EDIT: Я использую PyCharm как мой IDE

EDIT2: Переход на следующий не поможет вопрос:

def LookForCuiInLocal(disease, language): 
    conn = mysql.connector.connect(stuff here) 

    cursor = conn.cursor(buffered=True) 

    findLocalQuery = ("SELECT umls_concept_id from translation WHERE source_text = '{}'".format(disease)) 
    print("hey") 

     try: 
      cursor.execute(findLocalQuery) 
      resultList = cursor.fetchone()[0] 
      cursor.close() 
      conn.close() 
      return resultList 
    except (mysql.connector.Error, TypeError) as e: 
      print("Error when finding local CUI : {}".format(e)) 
      return None 

print(Helper().LookForCuiInLocal("paradentose", "da")) 

Однако, называя LookForCuiInLocal() из другого сценария не делает метод запуска дважды

+1

Как вы называете сценарий? Какая среда? Измените вопрос. –

+0

Я не думаю, что этот код воспроизведет проблему, которую вы описываете. – khelwood

+2

Каков минимальный пример, который может воспроизвести проблему? – kazemakase

ответ

2

Предположим, у нас есть файл foo.py, содержащий этот код

print("running from", __name__) 
import foo 

При запуске файла (это главное записи для программы) он запускается под именем __main__, когда он импортируется он запускает файл во второй раз под названием foo, поэтому выход будет

running from __main__ 
running from foo 

Редко у вас есть сам файл импорт, как правило, это происходит с круговым импортом - когда foo будет импортировать bar, который будет импортировать foo.

Для модуля, чтобы иметь код, который должен быть ввозу и код, который должен работать только тогда, когда это основная программа, положил основной код, предназначенный только внутри условия:

if __name__ == "__main__": 

Это заставит его выполняются только тогда, когда модуль является точкой входа и не при импорте.

+0

Ну. Если я только запускаю модуль и печатаю функцию, например: print (UMLS_Helper(). LookForCuiInLocal («hepatitis c», «da»)) Он будет работать дважды. Это может быть причиной импорта. Я импортирую другой модуль, который в конечном итоге импортирует мой основной контроллер. Я не знаю, вызвано ли это проблемой. Ввод печати («работает с», __name__) только сетками меня работает от __main__ c0019196 который показывает, что это только работает один раз –

Смежные вопросы