Ненависти (к Петону) псто

Sep 07, 2014 19:20

Ну вот как так можно написать, а? С той стороны приезжает JSON, я его парсю, нахожу в нем 'command', который 'exit' и в отладочной печати вижу "Now exiting the hive", но не вижу "Listener exits". И это нынче один из самых модных языков для разработки.
Read more... )

sd, python, hate

Leave a comment

Comments 23

evolver September 8 2014, 02:51:10 UTC
Ну, подобные симптомы можно на C++ легко сымитировать, сделав косячный деструктор для change, например.

DISCLAIMER: я с питоном не очень детально знаком

Reply


ex_juan_gan September 8 2014, 02:59:58 UTC
Я как-то не понимаю контекста. Джейсон содержит команды? Что б не пересылать весь джаваскрипт, и исполнять его.

Reply

provokatorz September 8 2014, 04:54:32 UTC
судя по скриншоту у него съехало форматирование последней строчки и она просто "выпала" :))

я так понимаю, что это пост ненависти к "форматной зависимости"

Reply

avnik September 8 2014, 05:02:23 UTC
кстати да, отступы косячные.
Но это же постараться надо -- их обычно редактор расставляет, и расставляет правильно.

PS flake8/pep8 вроде умеют показывать на такое пальцем

Reply

kika September 8 2014, 16:18:43 UTC
Не, пробелы все на месте, форматирование в порядке. Это видимо конверсия в HTML так сработала.

Reply


rblaze September 8 2014, 06:33:25 UTC
Твой редактор не умеет заменять tab на пробелы?

Reply


_slw September 8 2014, 08:54:54 UTC
изменил перловой мудрости предков? теперь страдай. боль и страдания искупляют!

Reply

kika September 8 2014, 16:21:32 UTC
Зато теперь я еще лучше понимаю разницу между "скриптовым" языком и языком программирования.

Reply

fi_mihej September 9 2014, 11:42:42 UTC
Либо ты напортачил с пробелами-табами; либо у тебя установлено какое-то расширение, которое при установке что-то в твоем репозитории поломало (тогда надо обновить расширение); либо у тебя стоит какая-то древняя версия интерпретатора (ну там 10-15-летней свежести например. Кхм...), в которой ты нарвался на глюк (тогда надо обновить интерпретатор). Последнее кстати очень вероятно, учитывая что ты используешь 2-ю версию Пайтона а не 3-ю: ты решил юзать что-то традиционное, забывая что 3-я сейчас - основная. И наверно ж с тем же порывом, продолжаешь использовать какую-нибудь "традиционную" сборку года этак 2005-го.

С тем же успехом у тебя могло вылезти что-то похожее на C++ (особенно если ты в нем не шаришь и впервый раз что-то написать решил). Уж его-то ты не зовешь "скриптовым" - как ни старайся.

Это я к тому что ты теперь понимаешь не "разницу между "скриптовым" языком и языком программирования", а разницу между инструментом, которым владеешь, и тем, которым не умеешь пользоваться. В любом случае не стоит уподобляться и гнать на язык

Reply

kika September 9 2014, 20:27:37 UTC
Петон 2.7.5, используется естественно virtualenv, в котором стоит только то что нужно и скачанное буквально два дня назад.

В С++, очевидно, могло вылезти не только что-то подобное, но много хуже (и вылезало тыщи раз). И если бы у меня так странно вела себя отладочная печать, то я бы взял в руки gdb и решил бы вопрос за время, необходимое для написания псто в ЖЖ. А в петоне же отладчик не нужен, правда? Работает искаропки.
Вот о чем и речь - какая коропка, так и работает.

Reply


_winnie September 8 2014, 10:46:40 UTC
У меня было две гипотезы - что вместо нормального break было пойманое исключение StopIteration, или что табы/пробелы перепутали.

Проверил, два предположения не подвердились (до моего браузера доехали только пробелы). В чем же было дело?

Я проверил на таком коде (снипет в посте сам по себе не запускается):

import simplejson

class X:
def __init__(self):

self.changes = simplejson.loads(
'[{ "doc" : { "command" : "exit" }}] '
)

def listen(self):
print "Listening"
for change in self.changes:
try:
if not change.get(u'deleted'):
doc = change.get(u'doc')
if doc:
print doc
if doc.get(u'command') == u'exit':
print "Now exiting the hive"
break
except:
print "Exception in changes reader!"
print "Listener exits"

X().listen()
После запуска выводится ( ... )

Reply

kika September 8 2014, 16:20:54 UTC
Вообще петон сам неплохо проверяет консистентность отступов, так что дело явно не в этом (да даже если бы и в этом - вызов listen() последний в тестовом скрипте, так что хоть как-то но оно должно было бы вывалиться).

Reply

_winnie September 9 2014, 08:04:57 UTC
AFAIK, Питон недостаточно dynamic для того, чтобы поменять смысл for и break. Если break не выходит из цикла - то наверное на самом деле код не доходит до break.

Мне except кажется подозрительным, он поймает все ошибки, включая опечатки в именах переменных.

Reply

kika September 9 2014, 20:29:14 UTC
except ничего не печатает и я пробовал его убирать, и пробовал вставлять туда rethrow, то есть raise.

Собственно это и есть зогатко: print перед break работает, а сам break - нет.

Reply


Leave a comment

Up