Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 21, 2012 12:18:46

Serbis
От:
Зарегистрирован: 2012-02-13
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Несовместимость типов в подстановке

elif i == 10:
	if str(toUtf8(it.text())) == '':
	  lit.append('NULL')
	else:
	  print str(toUtf8(it.text()))
	  print type(str(toUtf8(it.text())))
	  lit.append('%s') % (str(toUtf8(it.text())))
В случае выполнения условия все проходит ровно, в случае невыполнения полаю несовместимость типов в подстановке %s. Где косяк?

Вывод:

1.000
<type ‘str’>
Traceback (most recent call last):
File “/home/serbis/Prog/python/b3/sources/createa/head.py”, line 84, in slot_save
tb.loadData()
File “/home/serbis/Prog/python/b3/sources/createa/table.py”, line 89, in loadData
lit.append('%s') % (str(toUtf8(it.text())))
TypeError: unsupported operand type(s) for %: ‘NoneType’ and ‘str’



Офлайн

#2 Июнь 21, 2012 12:49:33

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Несовместимость типов в подстановке

Используйте str.format, проверяйте на is None, читайте документацию.

>>> m.append('%s' % (s,))
>>> m.append('%s') % (s,)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'NoneType' and 'tuple'



Отредактировано fata1ex (Июнь 21, 2012 12:52:10)

Офлайн

#3 Июнь 21, 2012 13:18:34

Serbis
От:
Зарегистрирован: 2012-02-13
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Несовместимость типов в подстановке

fata1ex
Используйте str.format, проверяйте на is None, читайте документацию.

>>> m.append('%s' % (s,))
>>> m.append('%s') % (s,)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'NoneType' and 'tuple'
Спасибо, дело действительно было в скобках



Офлайн

#4 Июнь 21, 2012 13:26:29

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Несовместимость типов в подстановке

Serbis, дело не в скобках, а в том, что вы не понимаете, что происходит, когда вы пишете конструкции языка. Это лечится чтением хорошего учебника. А еще очень полезно не писать сразу на форум, а попробовать разобраться самому.



Офлайн

#5 Июнь 21, 2012 13:31:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Несовместимость типов в подстановке

Serbis
if str(toUtf8(it.text())) == '':
а что возвращает it.text?



Офлайн

#6 Июнь 21, 2012 14:54:44

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Несовместимость типов в подстановке

fata1ex
Serbis, дело не в скобках, а в том, что вы не понимаете, что происходит, когда вы пишете конструкции языка. Это лечится чтением хорошего учебника. А еще очень полезно не писать сразу на форум, а попробовать разобраться самому.

Такое ощущение, что кто-то в школе и институте был “забитым ботаником”!

Офлайн

#7 Июнь 21, 2012 15:20:45

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Несовместимость типов в подстановке

buddha, странные у вас ощущения. Я стараюсь советовать то, что по моему мнению может помочь в дальнейшем обучении и развитии. Если вы не согласны с чем-то из того, что написано выше, я, разумеется, готов вас выслушать, но переход на личности, тем более таким способом, ничего кроме грустного недоумения не вызывает.



Отредактировано fata1ex (Июнь 21, 2012 15:21:21)

Офлайн

#8 Июнь 21, 2012 19:55:36

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Несовместимость типов в подстановке

Если разложить по полочкам, то смотрите, что получилось:
lit.append('%s') % (str (toUtf8(it.text())))
инструкция lit.append('%s') успешно добавляет в список lit строку ‘%s’, буквально!, естественно метод append возвращает None, т.е. ситуация аналогична None % (str (toUtf8(it.text()))), где % это не тот оператор, что вы ожидали, а другой (остаток от деления).

Офлайн

#9 Июнь 22, 2012 02:54:45

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

Несовместимость типов в подстановке

buddha
fata1ex
Serbis, дело не в скобках, а в том, что вы не понимаете, что происходит, когда вы пишете конструкции языка. Это лечится чтением хорошего учебника. А еще очень полезно не писать сразу на форум, а попробовать разобраться самому.
Такое ощущение, что кто-то в школе и институте был “забитым ботаником”!

это не ботаничность, а просто реакция на синтаксическую ошибку, которая допущена совсем не из-за невнимательности или залипания/недолипания клавиши
Serbis
lit.append('%s') % (str(toUtf8(it.text())))



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version