Уведомления

Группа в Telegram: @pythonsu

#1 Май 12, 2017 18:08:50

Gosha777
Зарегистрирован: 2017-05-12
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Не обрабатывается ошибка TypeError

Всем привет. Ввожу данный скрипт и у меня не обрабатывается исключение 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)

Офлайн

#2 Май 12, 2017 18:42:57

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Не обрабатывается ошибка TypeError

Чтобы возникло исключение TypeError, на входе должно быть что-то вроде такого:

 >>> 'a' - 'b'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'str'
У вас в операции вычитания делается приведение обоих операндов к типу int. Если возникнет исключение, то это будет ValueError:
 >>> int('a') - int('b')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'a'

Офлайн

#3 Май 12, 2017 20:01:27

Gosha777
Зарегистрирован: 2017-05-12
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Не обрабатывается ошибка TypeError

old_monty
Чтобы возникло исключение TypeError, на входе должно быть что-то вроде такого:
Ок, спасибо. Так а как мне тогда это сделать в виде программы, а не в интерактивной консоли? Ведь, если я не задаю тип int, то у меня высвечиваются цифры, после ввода пользователем, как строки.

Офлайн

#4 Май 12, 2017 21:15:00

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Не обрабатывается ошибка TypeError

Gosha777
если я не задаю тип int, то у меня высвечиваются цифры, после ввода пользователем, как строки
Конечно, результат возвращенный input(), это строка, перед вычитанием ее необходимо приводить к int. А исключение отлавливать не TypeError, а ValueError. Хотя мне думается, что здесь лучше обойтись вообще без исключений. У любой строки можно вызвать метод isdigit(), он возвращает True, если строка содержит только цифры, иначе False:
 >>> "0123".isdigit(), "123abc".isdigit(), "abc123".isdigit() 
(True, False, False)

Офлайн

#5 Май 13, 2017 00:49:46

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Не обрабатывается ошибка TypeError

 except (TypeError, ValueError):



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#6 Май 13, 2017 04:10:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9930
Репутация: +  856  -
Профиль   Отправить e-mail  

Не обрабатывается ошибка TypeError

old_monty
У любой строки можно вызвать метод isdigit(), он возвращает True, если строка содержит только цифры, иначе False:
str.isdigit() на первое время пойдёт, на постоянное время лучше сделать через regexp. Но уж точно не через исключение из int() это делается, потому что int() пропускает строки в которых могут быть не только цифры.

  
>>> int('\n\r\f\t+0123\n \n')
123
>>>



Отредактировано py.user.next (Май 13, 2017 04:11:04)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version