需要建议。

时间:2017-12-05 22:42:18

标签: python jupyter-notebook

如何调试" NameError:全局名称' X'没有定义"在Python?我是Python的新手。我正在使用jupyter_notebook和Python 2.7来执行代码。我正面临以下错误。

我的代码:

logFile = "NASAlog.txt"

def parseLogs():
    parsed_logs=(sc
            .textFile(logFile)
            .map(parseApacheLogLine)
            .cache())

    access_logs = (parsed_logs
            .filter(lambda s: s[1] == 1)
            .map(lambda s: s[0])
            .cache())

    failed_logs = (parsed_logs
            .filter(lambda s: s[1] == 0)
            .map(lambda s: s[0]))
    failed_logs_count = failed_logs.count()
    if failed_logs_count > 0:
        print 'Number of invalid logline: %d' % failed_logs.count()
        for line in failed_logs.take(20):
            print 'Invalid logline: %s' % line

    print 'Read %d lines, successfully parsed %d lines, failed to parse %d lines' % (parsed_logs.count(), access_logs.count(), failed_logs.count())
    return parsed_logs, access_logs, failed_logs

parsed_logs, access_logs, failed_logs = parseLogs()

ERROR

> NameError   Traceback (most recent call last) 
>           <ipython-input-18-b365aa793252> in <module>()
>      24     return parsed_logs, access_logs, failed_logs
>      25 
> ---> 26 parsed_logs, access_logs, failed_logs = parseLogs()
> 
> <ipython-input-18-b365aa793252> in parseLogs()
>       2 
>       3 def parseLogs():
> ----> 4     parsed_logs=(sc
>       5             .textFile(logFile)
>       6             .map(parseApacheLogLine)
> 
> NameError: global name 'sc' is not defined

1 个答案:

答案 0 :(得分:0)

问题是你从未定义过sc。因此python无法找到它。 (有道理,不是吗?)

现在有几个可能的原因: - python区分大小写。你在某处定义SC而不是sc吗? ...或Sc代替sc?

  • 您在另一个函数中定义了sc( - &gt;您在parseLogs()之外的函数中定义了它)。如果你只定义它,那么变量将是本地的,只是可用于函数内的代码。将行global sc添加到函数的第一行,以便在整个代码中随处访问它。

  • 您根本没有定义sc。