Python: «глобальное имя« время »не определено» - PullRequest
15 голосов
/ 06 августа 2010

Я пишу глупую программу на python для друга, которая печатает «Мы рыцари, которые говорят« Ни »!». затем спит в течение 3 секунд, а затем печатает "Ni!" двадцать раз с произвольными интервалами, используя метод random модуля *1001*. Вот мой код:

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

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

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

Ответы [ 5 ]

27 голосов
/ 06 августа 2010

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

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

2 голосов
/ 16 января 2012

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

Я работал time.time() с mod_python под Apache и Python. Если бы я попытался загрузить страницу с time.time() на ней, она не смогла бы заявить, что «глобальное имя« время »не определено». Тем не менее, если я зайду на свой веб-сервер и запишу точно такой же метод из командной строки, это сработает.

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

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

1 голос
/ 28 ноября 2018

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

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

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

0 голосов
/ 16 декабря 2015

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

0 голосов
/ 06 августа 2010

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

>>> import silly
>>> silly.knights_of_ni()
We are the knights who say 'ni'.
Ni!
Ni!
Ni!
Ni!
Ni!
Ni!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...