【问题标题】:NameError: global name is not defined when calling function from another python fileNameError:从另一个python文件调用函数时未定义全局名称
【发布时间】:2019-10-29 03:31:34
【问题描述】:

我正在尝试调用另一个 python 文件中存在的函数,并将当前正在运行的 python 文件中的用户输入传递给它。我不断得到 错误:

“NameError:未定义全局名称'main1'。”

这是我第一次在 python 中写作,也是第一次发布堆栈溢出,所以请原谅我,但我不确定在这篇文章中包含什么。我还在一个文件中使用Tkinter,在另外两个文件中使用pdf miner,而我的python version 2.7(我知道已经过时了)。

我尝试重命名被调用的主函数,以免将其与其他可能被调用的文件中的函数混淆,创建一个 Init.py 文件,将文件夹标记为源,因为我正在使用pycharm,以不同方式导入.py文件。

from DearNeighbor import *
from NameOnPage import *
from Tkinter import *
from tkFileDialog import *
from functools import partial
import Tkinter as tk

DearNeighbor 是包含main1 的文件,NameOnPage 是包含main2 的文件。

我正在尝试运行的函数:

def submit():
    if BoolNeighbor:
        main1(txt0, pdf0)
    if BoolName:
        main2(txt1, pdf1)

被传递的txt 和pdf 文件是两个字符串,它们是要查看的文件的地址。

DearNeighbor 中的 Main1:

def main1(textinput, pdfinput):
    start_time = time.time()
    global txt00
    global pdf00
    txt00 = textinput
    pdf00 = pdfinput
    pdf_dict = pdf_records_file()
    text_dict = records_in_text_file()
    different = set()
    count = 0
    for key in sorted(set(pdf_dict.keys()) & set(text_dict.keys())):
        pdf_value = [x.upper() for x in pdf_dict[key]]
        text_value = [x.upper() for x in text_dict[key]]
        if pdf_value == text_value:
            count += 1
            print()
            print(key, "from pdf file", pdf_dict[key], colored("MATCHED", 'green', attrs=['bold']), key, "from text file", text_dict[key])
            print()
        else:
            different.add(key)
            print(key, "from pdf file", pdf_dict[key], colored("DID NOT MATCH", 'red', attrs=['bold']), key, "from text file", text_dict[key])
            print()

    print()
    print("The number of records matched = ", colored(count, 'yellow',attrs=['bold']))
    print()
    print("Total time taken = ", colored(" %s seconds", 'yellow') % (time.time() - start_time))

打印的完整错误是:

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1536, in __call__
    return self.func(*args)
  File "/Users/will.rogers/Desktop/Python Scripts/ExecutableAutomation/venv/FrontEnd.py", line 69, in submit
    main1(txt0, pdf0)
NameError: global name 'main1' is not defined

这个程序中的其余代码是在 tkinter 中构建一个用户界面,它基本上是一堆(工作)按钮,它们导致提交功能,并且在此之前不会发生错误。我希望这是足够的信息,谢谢!

【问题讨论】:

  • 使用显式 from DearNeighbor import main1 而不是包罗万象的 from DearNeighbor import * 来尽早捕获失败的导入。
  • 调用main1和make2的代码的sn-p在哪个文件中?
  • @Oerd 它位于一个名为 FrontEnd 的文件中,它分别从两个互斥的布尔值调用 DearNeighbor(main1) 或 NameOnPage(main2)。
  • @MisterMiyagi 嗨,当我这样做时,我收到错误“ImportError:无法导入名称 main1”。有什么线索吗?
  • 与你的想法相反,DearNeighbor 不定义了main1。也许是错字?没有代码我们无法判断。

标签: python python-2.7 user-interface tkinter automation


【解决方案1】:

感谢所有 cmets!你们为我指明了正确的方向,我很感激。我在我希望 FrontEnd 导入的类中导入 FrontEnd,这导致了一些问题。然后我遇到了一个需要 Unicode 的异常,我给了它“str”。我通过升级到 Python 3.7 解决了这个问题(从技术上讲,我不应该这样做,但 2.7 给我带来了很多我无法抗拒的问题。特别感谢 cmets 中的@MisterMiyagi,如果没有他的帮助,我不会注意到!

【讨论】:

  • 如果有人有理由解释为什么该导入搞砸了,我会很感激解释,因为我不太了解 python。
  • 您是否使用了循环导入?前端 -> 亲爱的邻居 -> 前端?
  • @MisterMiyagi 是的,那是我的问题。
猜你喜欢
  • 2013-08-23
  • 1970-01-01
  • 2013-07-20
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
相关资源
最近更新 更多