Форум сайта python.su
Всем привет. Ввожу данный скрипт и у меня не обрабатывается исключение TypeError, хоть и возникает в среде Microsoft Visual Studio.
try: first_number = input('Print first number: ') second_number = input('Print second number: ') sub = int(first_number) - int(second_number) print(sub) except TypeError: print('Print not string, please...')
Отредактировано Gosha777 (Май 12, 2017 18:10:00)
Офлайн
Чтобы возникло исключение TypeError, на входе должно быть что-то вроде такого:
>>> 'a' - 'b' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for -: 'str' and 'str'
>>> int('a') - int('b') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'a'
Офлайн
old_montyОк, спасибо. Так а как мне тогда это сделать в виде программы, а не в интерактивной консоли? Ведь, если я не задаю тип int, то у меня высвечиваются цифры, после ввода пользователем, как строки.
Чтобы возникло исключение TypeError, на входе должно быть что-то вроде такого:
Офлайн
Gosha777Конечно, результат возвращенный input(), это строка, перед вычитанием ее необходимо приводить к int. А исключение отлавливать не TypeError, а ValueError. Хотя мне думается, что здесь лучше обойтись вообще без исключений. У любой строки можно вызвать метод isdigit(), он возвращает True, если строка содержит только цифры, иначе False:
если я не задаю тип int, то у меня высвечиваются цифры, после ввода пользователем, как строки
>>> "0123".isdigit(), "123abc".isdigit(), "abc123".isdigit() (True, False, False)
Офлайн
except (TypeError, ValueError):
[code python][/code]
Офлайн
old_montystr.isdigit() на первое время пойдёт, на постоянное время лучше сделать через regexp. Но уж точно не через исключение из int() это делается, потому что int() пропускает строки в которых могут быть не только цифры.
У любой строки можно вызвать метод isdigit(), он возвращает True, если строка содержит только цифры, иначе False:
>>> int('\n\r\f\t+0123\n \n') 123 >>>
Отредактировано py.user.next (Май 13, 2017 04:11:04)
Офлайн