2013-03-18 1 views
0

У меня есть кусок кода, который выступает в качестве слушателя кнопки и оценивает ли некоторые поля выше этой кнопки заполняется:Состояния не оценивается, как и ожидалось

def goListener(self): 
    if all([self.nme.get() != "", self.dsc.get() != "", self.imp.get != ""]): 
     name = self.nme.get() 
     desc = self.dsc.get() 
     while True: 
      try: 
       imp = int(self.imp.get()) 
       break 
      except: 
       imp = int(self.imp.get()) 

Когда я запускаю эту программу с различными полями заполнено или иначе, он получает это право, и выдает сообщение об ошибке я прошу его с каждой комбинацией за исключением случаев, NME и ЦКИ заполнены, но имп нет, это выдает сообщение об ошибке:

Traceback (most recent call last): 
    File "C:\Python33\lib\tkinter\__init__.py", line 1442, in __call__ 
    return self.func(*args) 
    File "C:\Python33\todo.py", line 68, in goListener 
    imp = int(self.imp.get()) 
ValueError: invalid literal for int() with base 10: '' 

Это запустив за исключением блока, кстати, чего он не должен. Это проблема с оценкой, или я что-то пропустил?

+1

конце вашей 2-й линии, вероятно, следует ... 'self.imp.get()', 'не self.imp.get' – Gerrat

ответ

4

У вас есть:

self.imp.get != "" 

Вы не в состоянии вызвать метод .get(). Попробуйте:

self.imp.get() != "" 
+0

Спасибо, я чувствую себя невероятно глупо прямо сейчас – cjm

3

Если imp = int(self.imp.get()) выдает сообщение об ошибке, вызов его снова за пределы блока try приведет к такой же ошибке.

except блок для кода, который должен бежать, когда есть исключение:

 try: 
      imp = int(self.imp.get()) 
      break 
     except: 
      print "Something bad happened" 
Смежные вопросы