Python: "глобальное имя" время "не определено"

Я пишу глупую программу на питоне для друга, который печатает "Мы рыцари, которые говорят" Ни "!". затем спит в течение 3 секунд, а затем печатает "Ni!" двадцать раз в случайных интервалах с использованием метода random module uniform(). Здесь мой код:

from time import sleep
import random

def knights_of_ni():
    generator = random.Random()
    print "We are the knights who say 'ni'."
    sleep(3)
    for i in range(0,20):
        print "Ni!"
        sleep(generator.uniform(0,2))

Я попытался импортировать этот модуль, введя интерпретатор from silly import knights_of_ni() и import silly, затем вызывая функцию с помощью knights_of_ni() или silly.knights_of_ni() (соответственно), но всегда получаю одно и то же исключение:

 NameError: global name 'time' is not defined

Что вызывает эту ошибку и как я могу исправить свой код?

Править: откровенно говоря, я не уверен, в чем проблема, с которой я столкнулся. На следующее утро я запустил код, и все прошло отлично. Клянусь, что код вызвал ошибки прошлой ночью... Во всяком случае, спасибо за понимание.

Ответ 1

Это невозможно. Пример вашего кода не совпадает с кодом, который вызвал эту ошибку.

Возможно, у вас был time.sleep(..) вместо sleep(..). Вы сделали from time import sleep. Чтобы использовать форму time.sleep(..), вы должны import time

Ответ 2

Извинения за некропологию, но я столкнулся с этой проблемой, хотя немного по-другому.

Я запускал time.time() с mod_python под Apache и Python. Если я попытался загрузить страницу с помощью time.time(), он не пожаловался бы, что "глобальное имя" время "не определено". Тем не менее, если я ssh'd в моем веб-сервере и запускаю тот же самый метод из командной строки, он будет работать.

В конце концов, перезапуск службы Apache2 устранил проблему. Я не уверен, почему это помогло. Я думаю, что модуль был выгружен в какой-то момент, а затем не перезагрузился, несмотря на команду импорта времени.

Это странно и немного загадочно. Извините, я никогда не искал фактическую причину, но надеюсь, что это поможет другому человеку.

Ответ 3

Что сказал Иевул. Я запустил ваш точный код, и он сработал:

>>> import silly
>>> silly.knights_of_ni()
We are the knights who say 'ni'.
Ni!
Ni!
Ni!
Ni!
Ni!
Ni!

Ответ 4

У меня есть ответ! У меня была та же проблема, просто перезапустите Canopy. Я не так хорош на питоне или понимании компьютеров, но моя программа думала, что я все еще называю "время" где-то, хотя это не было в коде.

Ответ 5

Импортируя функцию в другой файл перед ее вызовом, вы импортируете только содержимое этой функции. Импорт в верхней части этого файла не импортируется в другой файл. Вы должны поместить оба ваших импорта в функцию, чтобы она выглядела так:

def knights_of_ni():
    from time import sleep
    import random
    <the function contents>

Это проверит, что требуемый импорт доступен в том месте, где вы вызываете функцию. Не стоит беспокоиться о двойном импорте, потому что python не позволяет этого - если время импортируется в файл, куда импортируется эта функция, оно не

Ответ 6

У меня была такая же проблема. Я привел пример здесь, потому что я искренне думаю, что кто-то может искать что-то часами. Вот мой код:

import time

def func():

    start = time.time()
    //some code
    stop = time.time()

    time = stop - start
    print("{} fps".format((int)time)

И это сообщение: время не определено или определено до назначения (в начале строки = time.time())

Проблема заключалась в том, что я использовал другую переменную с именем time для time = stop - start. В этом случае вы можете просто изменить имя переменной времени.