Оператор Try / Except для поля ввода виджета - PullRequest
0 голосов
/ 08 марта 2020
try:
      float(self.entry_weight.get()) and int(self.entry_height.get())
      self.get_bears()
except:
      messagebox.showinfo("Number Error","Your weight and height must be a number!")

Здравствуйте, этот оператор try / исключением не работает, когда я ввожу числа в поля ввода и нажимаю соответствующую кнопку, я получаю только сообщение, в котором говорится, что мои входные данные не являются числами. Я использовал операторы печати, чтобы убедиться, что я проверяю правильные поля ввода, и я. Когда я проверяю тип, я возвращаюсь, как и ожидалось, но обязательно, если эти строковые входы являются числами, оператор try кроме должен работать. Любая помощь будет большой благодарностью.

1 Ответ

3 голосов
/ 09 марта 2020

Ваш блок try / кроме охватывает слишком большую территорию. Помимо проблем с вводом, он ловит все, что может go не так с get_bears. Кроме того, and короткое замыкание, поэтому вторая проверка никогда не выполняется, если вес равен 0. Вы можете использовать два блока try / кроме, чтобы покрыть все

try:
    # validate input
    float(self.entry_weight.get())
    int(self.entry_height.get())
except ValueError:
      messagebox.showinfo("Number Error","Your weight and height must be a number!")
      return
try:
    self.get_bears()
except:
    messagebox.showinfo("Unhandled Error","Unknown error in program")
    # log it somewhere
    import traceback
    traceback.print_exc()
    # likely want to exit() because program is highly busted
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...