Python 3.2.1: преобразование записи в число

#python #graphics #numbers

#python #графика #числа

Вопрос:

Я сам по себе пытаюсь создать что-то вроде Python «Цена правильная». Моя проблема в том, что я пытаюсь преобразовать запись в число. Смотрите код ниже:

  ...

 Podium1Bid = Entry(Point(42.5, 35), 4)
Podium2Bid = Entry(Point(122.5, 35), 4)
Podium3Bid = Entry(Point(202.5, 35), 4)
Podium4Bid = Entry(Point(282.5, 35), 4)

Bid1 = int(Podium1Bid.getText())
Bid2 = int(Podium2Bid.getText())
Bid3 = int(Podium3Bid.getText())
Bid4 = int(Podium4Bid.getText())

 ...
 

Строки Bid1 = int(Podium1Bid.getText()) и т.д. через Bid4… выдайте мне ошибку:

  Traceback (most recent call last):
    File "<pyshell#8>", line 1, in <module>
       ContestantsRow()
    File "<pyshell#7>", line 31, in ContestantsRow
       Bid1 = int(Podium1Bid.getText())
 ValueError: invalid literal for int() with base 10: ''
 

Я также пытался использовать eval() и подобные вещи, и я все еще получаю ошибки.

Комментарии:

1. Вы проверили, что Podium1Bid.getText() на самом деле возвращает?

2. @Lycha: когда я ввожу случайные числовые значения для тестирования (133, 123, 456, 789), он выводит их (я закомментировал int(Podium1Bid.getText()) и т.д. Вместе с несколькими другими строками). И если у меня есть сравнение значения Podium1Bid.getText() с числовым значением (позже в коде), конечно, в нем говорится, что он может сравнивать только числа, а не «Текст».

3. Можете ли вы опубликовать свой код для класса Entry (и класса Point, если он является источником целочисленного значения)? Кроме того, покажите, какое целое число вы ожидаете для данного ввода.

4. @Raymond Hettinger: я просто использую импорт графики, чтобы получить графическую библиотеку Python (которая у меня есть на моем компьютере).

5. Хорошо, я расширил ответ, включив случай, когда у вас нет контроля над классом (т. Е. Вы не можете добавить int ).

Ответ №1:

Я не совсем уверен, что здесь происходит с этими PodiumBid объектами, но ошибка:

 ValueError: invalid literal for int() with base 10: ''
 

просто означает, что python не знает, как преобразовать пустую строку в число. int('') вызовет то же исключение.

Если вы хотите, чтобы пустая строка была равна 0 , вы можете сделать что-то вроде этого:

 int(mystring or 0)
 

который будет использоваться 0 в качестве входных данных для int if mystring вычисляется False как (например, пустые строки).

Ответ №2:

Если бы Point и Entry были вашими собственными классами, вы могли бы добавить метод __int__ в свой класс Entry. Это научит класс, как быть конвертируемым в целое число.

В случае графической библиотеки Python вы должны проверить объекты, используя vars(Podium1Bid) , чтобы увидеть, какие атрибуты доступны напрямую с помощью чего-то вроде Podium1Bid.width или Podium1Bid.point.x .