Исключение не обрабатывается блоком try-Кроме в Python - PullRequest
1 голос
/ 20 мая 2019

Я написал простой код Python для ввода любого числа от пользователя. В случае, если что-то еще введено, исключение повышается согласно коду. Я вписываю введенное значение в int, чтобы проверить, является ли оно целым числом. В идеале я исключаю, что при вводе любого алфавита должно возникать исключение и печататься текст, который я дал. Но все же я вижу, что его не поймали.

Однако, когда я специально добавляю еще один блок try-исключением вокруг оператора typecast, он работает


from tkinter import *

window = Tk()
window.geometry('400x400')

class hangman:
    def __init__(self):
        self.entry = ''

    def clicked(self, label2):
        label2.place(x=100, y=200)

        while True:
            try:
                def get_value(event):
                    self.entry = e1.get()
                    self.entry = int(self.entry)
                    print(self.entry)

                Label(window, text="Enter any number :").place(x=10, y=220)

                e1 = Entry(window)
                e1.place(x=10, y=240)
                e1.bind('<Return>', get_value)  #To get the value entered in the entry when Return is pressed.
                print("Past bind1")
                print(self.entry)
                print("Past bind2")
                break

            except ValueError as e :
                print("\n\tPlease Enter only Numbers!!")


obj1    = hangman()
label2  = Label(window, text="Start")
bt      = Button(window, text="Play", command=lambda: obj1.clicked(label2))

bt.place(x=150, y=125)

window.mainloop()

Я ожидаю, что будет перехвачено исключение, и напечатает мое сообщение вместо стандартной ошибки исключения.

1 Ответ

2 голосов
/ 20 мая 2019

Если вы вставили блок try / исключением в функцию get_value, исключение будет перехвачено правильно:

from tkinter import *
window = Tk()
window.geometry('400x400')


class hangman:
    def __init__(self):
        self.entry = ''

    def clicked(self, label2):
        label2.place(x=100, y=200)

        while True:
            def get_value(event):
                try:
                    self.entry = e1.get()
                    self.entry = int(self.entry)
                    print(self.entry)
                except ValueError as e:
                    print("\n\tPlease Enter only Numbers!!")

            Label(window, text="Enter any number :").place(x=10, y=220)

            e1 = Entry(window)
            e1.place(x=10, y=240)
            e1.bind('<Return>', get_value)  # To get the value entered in the entry when Return is pressed.
            print("Past bind1")
            print(self.entry)
            print("Past bind2")
            break


obj1 = hangman()
label2 = Label(window, text="Start")
bt = Button(window, text="Play", command=lambda: obj1.clicked(label2))

bt.place(x=150, y=125)

window.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...