2015-08-24 1 views
0

Я уверен, что для этого есть простое объяснение (помимо того, что я новичок в Python), но, допустим, у меня есть два файла в том же каталоге. Один этот маленький скрипт в файле с именем lexicon.py, который проверяет ввод данных пользователем:ValuError с использованием функции импорта в классе

def string_checker3(action): 
    try: 
     check = isinstance(action, basestring) 
     if check: 
      return True 
     else: 
      raise ValueError 
    except ValueError: 
     print "We need a string here!" 
     return None 

def Chipcar_testgreeting(action): 
    action_split = action.split() 
    for i in action_split: 
     strcheck = string_checker3(action) 
     if strcheck == None: 
      StartGame 
     else: 
      pass 

Другой сценарий, мой основной сценарий, называется newGame.py и имеет класс, как это, в течение которого я хотел бы вызвать функцию Chipcar_testgreeting(action) ,

from lexicon import * 

class ChipCar(Scene): 



    def enter(self): 
     print "What's up mothafucka! Get in the Bran Muffin car!" 

     action = raw_input("> ") 
     user_test = lexicon.Chipcar_testgreeting(action) 
     user_test 

     if(action == "shut up chip" or action == "oh no, it's chip"): 
      print "forget you!" 
      print action 
      return next_scene('Your_death') 
      #return 'Death' 
     elif(action == "hi chip" or action == "hello chip"): 
      print "What's up?!?! Let's go to O&A..." 
      return next_scene('Chip_in_studio') 
     else: 
      print "what's wrong with ya are ya stupid or sumptin? Let's go to my mudda's house, I think Lamar's there..." 
      return next_scene('Chip_mom_house') 

FirstScene = ChipCar() 
StartGame = FirstScene.enter() 

Однако, я получаю эту ошибку прямо сейчас:

user_test = lexicon.Chipcar_testgreeting(action) 
NameError: global name 'lexicon' is not defined 

Что я делаю неправильно?

+3

Вы не импортировали 'лексикон'. Я думаю, что у вас есть идея импорта назад. Если вы хотите использовать 'lexicon' в' newGame', вам нужно импортировать 'lexicon' в' newGame', а не наоборот. В вашем коде также есть другие ошибки, поэтому вы, вероятно, должны прочитать [учебник Python] (https://docs.python.org/tutorial). – BrenBarn

+0

@BrenBarn только что оставил импорт из поста, исправленный сейчас. Определенно запускается скрипт с правильным импортом и получением ошибки, как опубликовано. – SeanJarp

ответ

2

Как вы написали from lexicon import *, все импортируемые имена этого модуля доступны вам напрямую (другими словами, вам больше не нужен lexicon.).

Если вы пишете import lexicon, теперь вы только импортировали имя lexicon в модуле, и вы должны использовать его и оператор сфера разрешения (это .), чтобы добраться до других имен объектов внутри этого модуля. В этом случае вы можете использовать lexicon.Chipcar_testgreeting(action).

Итак, либо замените from lexicon import * на import lexicon, либо измените lexicon.Chipcar_testgreeting(action) на Chipchar_testgreeting(action).

Рекомендованный вариант - использовать import lexicon.


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

if strcheck == None: 
    StartGame 
else: 
    pass 

Не уверен, что вы ожидаете StartGame здесь делать, так как нет ничего с этим именем в модуль lexicon.py.