#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
.