2014-05-21 6 views
0

이 코드는 내게 문제가되는 영역입니다. 그것은 가져 오기 시간 대 datetime import datetime, time과 관련이 있습니다. 분명히 하나의 명령문을 호출 할 수없는 것입니다 ( ). 재 배열하려고하면 호출 할 수없는 또 다른 명령이 생깁니다. 아래에서 오류 코드를 참조하십시오. 내가 수입을 재 배열하거나 (마지막으로 가장 최근에 전화를) 나는이 두 가지 오류 중 하나가 raceback 얻을 코드에서 하나 가져 오기를 삭제하면 어떤 도움도 여기파이썬 날짜 시간과 시간

import time 
from datetime import datetime, date , tzinfo, timedelta, time 
from pytz import timezone 
import pytz 
from twitter import * 


t = time(3,0,0,0) 
    print(t) 
    now = datetime.utcnow() 
    nowYear = int(now.year) 
    nowMonth = int(now.month) 
    nowDay = int(now.day) 
    nowHour = int(now.hour) 
    nowMin = int(now.minute) 
    nowSec = int(now.second) 
    now = datetime(nowYear, nowMonth, nowDay, nowHour , nowMin, nowSec, tzinfo=utc) 
    tomorrow = datetime(nowYear, nowMonth, nowDay +1, 7 , 0, 0, tzinfo=utc) 
    now = now.astimezone(timeZone) 
    #tomorrow = tomorrow.astimezone(timeZone) 
    print(now) 
    print(tomorrow) 
    delta = timedelta() 
    delta = tomorrow - now 

    deltaS = delta.total_seconds() 

    time.sleep(30) 

glady 높이 평가 입력 코드가 될 것이다 :

File "pract.py", line 164, in <module> 
    main() 
    File "pract.py", line 142, in main 
    t = time(3,0,0,0) 
UnboundLocalError: local variable 'time' referenced before assignment 

or 

traceback (most recent call last): 
    File "pract.py", line 164, in <module> 
    main() 
    File "pract.py", line 142, in main 
    t = time(3,0,0,0) 
UnboundLocalError: local variable 'time' referenced before assignment 

여성과 신사 여러분의 시간을 내 주셔서 감사 드리며 답변을 기다리십시오.

+0

참고 사항 - 함수를 작성하는 동안 변수 이름 공간에 대한 LEGB 규칙을 기억하십시오. 나는 당신이 이미 그 일을하지 않았다면 당신이 읽을 것을 제안합니다. Explained @ http://stackoverflow.com/questions/291978/short-description-of-python-scoping-rules –

답변

2

나는이 오류가 여러분이 이름이 time 인 것으로 부주의하다고 생각합니다. 서로 다른 시간대에 그 이름 아래로 갈 수있는 두 가지 또는 아마도 세 가지가 있습니다 (그리고 서로 겹쳐 지거나 겹쳐 쓰는 것).

처음 두 귀하의 수입에서있다 : 두 줄의 끝에

import time 
from datetime import datetime, date , tzinfo, timedelta, time 

time. 두 번째 모듈 time을 덮어 쓰면 datetime.time이됩니다. 모듈 (예 : time.sleep)에서 무언가를 호출하려고하면 사용할 수 없으므로 오류가 발생합니다.

이 유형의 일반적인 해결책은 from module import name 가져 오기 스타일을 사용하지 말고 네임 스페이스를 손상시킬 수 있기 때문입니다. import datetime을 수행 한 다음 time 모듈을 섀도 잉하지 않고 time 유형에 명확하게 액세스하려면 datetime.time을 사용하십시오. 또 다른 옵션은 as을 사용하여 가져온 값 중 하나의 별칭을 import time as time_module으로 변경하는 것입니다.

귀하의 main 함수에서 time이 로컬 변수로 사용되는 것이 좋습니다. 이는 가져온 변수 time 변수에도 액세스 할 때 문제가됩니다. 동시에 로컬 변수와 글로벌 변수 모두에 동일한 이름을 사용할 수 없습니다! 로컬 변수가 전역 변수를 섀도 잉하고 있기 때문에 잘못된 값을 얻거나 로컬 변수가 할당되기 전에 전역 변수에 액세스하려고하면 오류가 발생합니다.

def main(): 
    t = time(3,0,0,0) # this tries to use the global `time` imported earlier 

    # later... 
    time = something() # this tries to assign some value to a local `time` variable 

이에 대한 해결책은 지역 time 변수에 다른 이름을 사용하는 것입니다 : 당신의 코드가 같은 것을 가정합니다.

+1

감사합니다! 응답을 발전시키고 이전보다 더 명확하게 만드는 데 도움이됩니다. 긴 응답과 시간 동료 코더 감사 – user3658848

관련 문제