python-3.x 第二次遍历同一模块时出现问题

zpqajqem  于 2022-12-01  发布在  Python
关注(0)|答案(1)|浏览(135)

我有两个.py文件。主模块是'TS_File_analysis.py',子模块是'Port_operations. py'。
导入主模块中的子模块。

from Port_operations import *

def main_menu():
    try:
        if r == 1:
            print()
        elif r == 2:
            search_cmd_output()
        elif r == 3:
            port_analyze_drops()
        elif r == 4:
            print('Exit out.! Good bye..:)')
            return
        else:
            print('Entered option was not valid.\n')
            main_menu()
    except ValueError as ex:
        print('Din\'t choose any option.\n')
        main_menu()

在子模块文件中导入main_module。

from TS_File_analysis import main_menu

def port_analyze_drops():
    try:
        if int(r2) == 1:
            get_output_of_port_drops()  
        elif int(r2) == 2:
            get_output_of_port_errors()
        elif int(r2) == 3:
            del_res_file(temp_result2)
            main_menu()
        else:
            print('Entered option was not valid.\n')
            port_analyze_drops()
    except ValueError as ex:
        print('Din\'t choose any option.\n')
        port_analyze_drops()
    return

在初始运行时,我们可以成功地从main_module转到sub_module,然后返回main_module。同样,如果我想从main_module转到sub_module,它会失败,并显示以下跟踪。

Traceback (most recent call last):
  File "C:\Users\user1\Documents\Python\Source\Workspace\TS_File_Analysis\TS_File_analysis.py", line 151, in <module>
    main_menu()
  File "C:\Users\user1\Documents\Python\Source\Workspace\TS_File_Analysis\TS_File_analysis.py", line 95, in main_menu
    port_analyze_drops()
  File "C:\Users\user1\Documents\Python\Source\Workspace\TS_File_Analysis\Port_operations.py", line 20, in port_analyze_drops
    main_menu()
  File "C:\Users\user1\Documents\Python\Source\Workspace\TS_File_Analysis\TS_File_analysis.py", line 94, in main_menu
    port_analyze_drops.__module__
NameError: name 'port_analyze_drops' is not defined

期望从main_module切换到sub_module,反之亦然,次数与您尝试切换的次数相同。

2izufjch

2izufjch1#

从提供的代码片段中很难看到模块层次结构、导入结构、调用树和命名空间。我必须看到main_menu模块才能理解导入结构。如果你能把它贴出来会很有帮助。
我可以看到两个潜在的问题,可能会让你感到困惑。
首先,Python的“import STAR”语句带有“import *”是完全不受欢迎的。这被认为是糟糕的命名空间管理实践,因为你可以很容易地在没有意识到的情况下破坏其他对象的名称。看起来你可能用你的IMPORT STAR破坏了main_menu函数。请提供“TS_File_analysis.py”文件的完整源代码。
第二,最好用一个顶级的主模块来构建你的模块,比如,“app_main.py”,它导入其他支持模块。你的main_menu()函数应该在app_main.py文件的底部,并且在其他模块导入之后运行,而不是相反。子模块不应该导入主模块。

相关问题