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. В этом случае вы можете просто изменить имя переменной времени.