2017-12-05 2 views
-3

"NameError : 전역 이름 'X'이 (가) 파이썬에서 정의되지 않았습니다."를 디버깅하는 방법? 나는 파이썬에서 꽤 새로운 것이다. 파이썬 2.7에서 jupyter_notebook을 사용하여 코드를 실행하고 있습니다. 나는 뒤에 오는 과오를 직면하고있다.제안이 필요합니다.

내 코드 :

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 
+4

여기서 'sc'변수를 정의합니까? –

+0

"긴급한 제안이 필요합니다"와 같이 어리석게도 광범위한 성명서와 대조적으로 문제의 첫 부분에 실제 문제를 알리는 질문을하십시오. –

+0

BTW : NASA 엔지니어가있는 것이 좋다. ^^ – fameman

답변

0

문제는 당신이 사우스 캐롤라이나를 정의하지 않은 것입니다. 따라서 파이썬 그것을 찾을 수 없습니다. (의미가 있나?)

이제 몇 가지 이유가있을 수 있습니다. - python은 대소 문자를 구분합니다. sc 대신에 SC를 정의하셨습니까? ... 아니면 Sc 대신 Sc를?

  • 당신은 다른 함수에 SC를 정의 (-> 당신이 함수에서 정의 외부 parseLogs()). 변수 만 정의하면 변수가 지역 변수가되어 함수 내부의 코드에서만 사용할 수 있습니다. 함수의 첫 번째 행에 global sc 행을 추가하여 전체 코드의 모든 곳에서 액세스 할 수있게하십시오.

  • 단순히 sc를 정의하지 않았습니다.

+0

여기에 귀하의 게시물에 서명하지 마십시오 - 귀하의 프로필 카드로 저자를 만들 수 있습니다. – halfer

관련 문제