false 30.10.2010 07:39

PythonНемного о python 2 && python3

Писал чат,возникла проблема - не могу передать строку на сервер,
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

код
s.send(msg)

код

Tак питон 3 меня не понял)

Покурив форумы выяснилось,что дело в том,что в python3 , в отличии от второго, аргумент должен быть обязательно набором байтов, а не строкой.. т.е строка во втором считалась набором байтов,а в третьем теперь не считается (насколько я понял)
решается это все так -
msg = str.encode(self.plainTextEdit.toPlainText())
s.send(msg) #отправляем

и
d = data.decode('utf8') # получаем

Может кому будет полезно,т.к я например выкурил половину форумов инета, пока понял в чем проблема))
И если что - прошу сильно не бить,т.к я еще учусь)


Тэги: python
+ 4 -
Похожие Поделиться

atommixz 30.10.2010 09:21 #
всё дело в новом типе byte, а encode и decode это всё, что тебе было нужно.
justabaka 30.10.2010 11:21 #
Поздравляю.

http://docs.python.org/release/3.0.1/whatsnew/3.0.html
> Everything you thought you knew about binary data and Unicode has changed.
grandse 30.10.2010 17:30 #
Ну если активно работать с Python, то думаю новостью не будет, что записывать в сокет (с версии 3+) можно только наборы байт. Однако для новичков может стать настоящей проблемой. Я как-то решил какую-то библиотекчку полтора года назад под 3ий Python переписать... ого-го сколько узнал всего в процессе :)
А вообще по теме полезным будет при переходе http://docs.python.org/library/2to3.html, http://diveintopython3.org/porting-code-to-python-3-with-2to3.html и еще можно ознакомится с http://ptgmedia.pearsoncmg.com/imprint_downloads/informit/promotions/python/python2python3.pdf. Я тогда еще какую-то табличку использовал (аналогичную pdf-ке) и google.
Правда пока Python3 не сильно востребован лично для меня: я работаю восновном над web-приложениями и все сервера и фреймворки расчитаны под Python 2. Что Web3, что предложения по переносу wsgi на третью версию совсем недавно появились, так что пока о активном использовании 3ей ветки говорить рановато.
Slimy 01.11.2010 01:22 #
У питона строгая типизация появилась?
grandse 03.11.2010 10:53 #
Необязательная строгая типизация с 3ей версии. Разработчики языка решили, что в некоторых случаях это поможет писать более чистый и понятный код. С этим в принципе сложно несогласиться.
Ну а вообще-то типизация в нем и так всегда была хотя и неявная, но раньше все функции стандартной библиотеки ввода/вывода работали со строками, теперь многие с байтовыми массивами. В причину такого решения я как-то не вникал.
Slimy 03.11.2010 19:58 #
Ну то что явное указание типа помогает разибираться в исходнике это определенно так. Но с другой стороны если она не обязательная ее можно игнорировать. Так в общем и поступают. В том же рнр можно явно указывать типы, однако чтото не встречал подобного в реальных поделках. Лень человеческая идет по пути наименьшего сопротивления.В прочем за питон можно порадоватся он никак решил стать чем то большим чем средством написания поделок. Глядишь еще и байт код научится генерить а там и за компилятором не далеко :). Может тогда kde наконец разгонится.
grandse 04.11.2010 08:37 #
Python давно уже не средство для поделок. Он и так умеет генерировать байткод и уже есть реализации jit (в рамках PyPy). На нем пишется практически;
- системные утилиты (Portage, yum, насколько мне известно где-то 7ой версии весь perl код базовой поставки FreeBSD был заменен на Python, многие утилиты Gnome написаны на нем)
- системы контроля версий (Mercurial, Bazaar)
- графические редакторы (Scencil, как язык скриптования в Blender, Maya, Gimp)
- игры (и клиент и сервер EVE Online, как скриптовый язык например в Civilization IV)
grandse 04.11.2010 08:47 #
О веб-разработке вообще отсдельная история: Zope (древний гигант), Django, Google AppEngine, CherryPy, Pylons, TurboGears, Tornado. Написаны Launchpad, Blogger, Reddit, активно используют его Google, Facebook (Tornado), Mozilla и прочие-прочие.

Не знаю только ОС написанных на Python. :)