NameError:未定义全局名称“myLogFile”

Posted

技术标签:

【中文标题】NameError:未定义全局名称“myLogFile”【英文标题】:NameError: global name 'myLogFile' is not defined 【发布时间】:2012-04-13 05:18:16 【问题描述】:

我有两个函数,我已将其中一个函数放入单独的 .py 文件中,以便导入它,但在尝试运行脚本时出现错误。

我放在单独的 .py 中的函数是:

def output_messaging(message):
    global myEmailText
    myLogFile.write(message)
    myEmailText = myEmailText + message
    print message

我运行的脚本有以下代码:

def finish_process(errors):
    global myLogFile
    myLogFile.close()
    if errors == 0:
        myEmailHeader = "Subject: **"
    elif errors == 1:
        myEmailHeader = "Subject: **"
    else:
        myEmailDestination.append("**") 
        #myEmailHeader = "Subject: **"
    server = smtplib.SMTP(myServer) #email data log to nominated individuals
    server.sendmail(myEmailSender, myEmailDestination, myEmailHeader + "\n" + myEmailText)
    server.quit()

当我运行脚本时,出现以下错误。

NameError: global name 'myLogFile' is not defined

myLogFile 在代码的下方声明(即日志文件的位置),但我有点困惑。

谢谢

【问题讨论】:

如果您向我们展示了一个完整的简短示例来说明问题,我们将能够告诉您究竟问题是什么...... 文件“D:\temp\UFRM\messaging.py”,第 4 行,在 output_messaging myLogFile.write(message) NameError: global name 'myLogFile' is not defined 【参考方案1】:

错误很明显。 myLogFile 未在您的 output_messaging 函数中的任何位置定义。您需要在该函数中定义它,或将其作为参数传入。

无论如何,您都不应该使用全局变量,它们几乎总是一个坏主意。显式传递参数。

【讨论】:

我在 output_messaging 函数中添加了全局 myLogFile,但它仍然给我同样的错误。【参考方案2】:

output_messaging 中,您没有global myLogFile 来表示myLogFile 是在文件的其他位置定义的。当 Python 运行该函数时,它现在无法识别该变量。

请注意,通常不鼓励使用全局变量,但这是一个不同的讨论。

【讨论】:

以上是关于NameError:未定义全局名称“myLogFile”的主要内容,如果未能解决你的问题,请参考以下文章

熊猫不进口吗? 'NameError:未定义全局名称'pandas''

NameError:未定义全局名称“QColor”

NameError:未定义全局名称“lower”

NameError:未定义全局名称

DD.close() NameError: 全局名称 'DD' 未定义

NameError:未定义全局名称“myLogFile”