Python - вызов функции между файлами - PullRequest
0 голосов
/ 04 июня 2019

У меня проблема с вызовом функции между двумя файлами Python. У меня есть этот файл, fileone.py. Это основной файл, который он выполняет непрерывно, затем, когда оператор if становится истинным, он выполнит задачу, после чего вызовет функцию main() в другом файле, filetwo.py. Затем я использую break, чтобы остановить цикл: (fileone.py)

import filetwo

foo = "sample"

def main():
    while True:
        if foo == "sample":
            #Some task here
            print("HELLO")
            filetwo.main()
            break
main()

А это другой файл, filetwo.py. Он имеет функцию main(), fileone.py будет вызывать эту функцию для выполнения некоторой задачи, затем после выполнения задачи он снова вызовет функцию main() в fileone.py: (filetwo.py)

import fileone

foo = True

def main():
    if foo == True:
        #Some task here
        print("WORLD")
        fileone.main()

Но я получаю такую ​​ошибку. AttributeError: module 'filetwo' has no attribute 'main'. Я не знаю, хорош ли мой подход к вызову файловых функций или есть ли лучший способ сделать это. Я пытался использовать os.system для запуска / вызова файла python, но я читал в некоторых статьях здесь, что гораздо лучше назвать его функциональным способом.

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Кажется, что filetwo нет необходимости возвращаться в fileone.Просто наберите fileone call filetwo и продолжите цикл, когда он вернется.

fileone.py:

import filetwo

foo = "sample"

def main():
    while True:
        if foo == "sample":
            #Some task here
            print("HELLO")
            filetwo.main()
            print("(back in main loop, fileone.foo is {0!r} and filetwo.foo is {1!r})".format(foo, filetwo.foo))

main()

Затем в filetwo.py:

foo = True

def main():
    if foo == True:
        #Some task here
        print("WORLD")
        return  # Just to be explicit

Не ясно, что вы ожидаете foo.На самом деле есть два объекта с именем foo, один в области действия fileone со значением "sample", а другой в области действия filetwo со значением True.Если вы хотите разделить переменную между двумя модулями, возможно, передайте ее в вызове (или, в идеале, сделайте ее global).

0 голосов
/ 04 июня 2019

Одним из способов решения проблемы является использование if __name__ == "__main__" в файле один. Обратите внимание, что, поскольку цикл повторяется вечно, вы в конечном итоге получите RecursionError после распечатки стольких «HELLO» и «WORLD».

import filetwo

foo = "sample"

def main():
    while True:
        if foo == "sample":
            #Some task here
            print("HELLO")
            filetwo.main()
            break

if __name__ == '__main__':
   main()

Файл два неизменен и ниже

import fileone

foo = True

def main():
    if foo == True:
        #Some task here
        print("WORLD")
        fileone.main()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...