- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
NULL = object()
#...
def css_one(self, path, default=NULL):
"""
Get first element which matches the given css path or raise DataNotFound.
"""
try:
return self.css_list(path)[0]
except IndexError:
if default is NULL:
raise DataNotFound('CSS path not found: %s' % path)
else:
return default
Я бы, естественно, тихо возвращал бы None по умолчанию, но раз тут питон-эксепшн-стайл и код должен быть подобен изрядно подвыпившей девице на каблуках, то пусть так и будет.
Вон в jQuery сеттеры не могут назначить undefined потому, что считают, что им не передали аргумент, и становятся геттерами. А тут явный None, красота.
А больше ты это никак и не сделаешь... Или вопрос в том, стоит ли вообще допускать None на выход?
http://ideone.com/J5yoiw
P.S. Хотя экмадрочерам к подобному поведению не привыкать.
Да она тут слабо влияет. Был бы printf сишный, были бы те же разговоры.
> т.к. может случайно скрыть ошибку.
Ну, если аргумент недодали и функция пропускает, то ещё ладно, могут быть проблемы. А тут-то он лишний! Без него работало, с ним тоже работает, красота.
А никто и не собирается защищать это небезопасное говно... Если бы не ворнинги от компилятора - юзать вообще было бы страшно.
Не понимаю я такой красоты... Имхо, нарушивший контракты код должен дохнуть как можно раньше. В идеале - во время компиляции.
Если честно - ёбаная срань, которую юзать не хочется для чего-то сложнее копирования пары файликов. Хуже только батники и цмд.
Синтаксис ебанутый и некроссплатформенный (да, у sh есть несколько несовместимых говнопотомков, bash - всего лишь один из них). Надо знать о куче подводных камней. И не дай бог понадобятся регулярки...
>Хуже только батники и цмд.
Про это еще в фатальном недостатке писали, что по традиции МС в один момент дропнули cmd и с нуля создали помершелл. Да, гомнище еще то. Честно говоря, моя основная претензия как программиста к башу/цмд (одмины/эникеи/красноглазики могут тут смотреть иначе) - все - строка. Чтобы строку куда-то передать, надо ее безопасно заэскейпить итд. Помершелл при своей сравнительной сложности гораздо ближе к языку программирования, хоть и странному (результат "2"*3 и 3*"2" разный).
Вот нагуглилось http://stackoverflow.com/a/180630 . Изъябываемся чтобы параметр внезапно не стал ключем.
Я это писал? Покажи мне цитату.
> основная претензия
Это ты ещё регулярки не видел, где половина эскейпов вверх-ногами работает (часть символов надо эскейпить чтобы оно получили специальный смысл)... И с циклом for не работал, который по-дефолту если файлов не нашёл выполняется один раз с нераскрытой маской...
> Вот нагуглилось
Ну и это тоже, да.
>Это ты ещё регулярки не видел
Лол? Я знаю что это такое, мы их в треде про pyparsing обсуждали, забыл?
сразу видно, что кто-то emacsом не пользуется
это POSIX-синтаксис, которой исторически появился раньше PCRE, кстати
Да, мы уже с тобой как-то обсуждали этот вопрос. Баш был нужен для того, чтобы с минимальным кол-вом синтаксического шума склеивать простые глупые программы и получать результат. Кмк, это средство интерактивного взаимодействия с системой, а не средство для написания нетривиальных программ.
Сложные скипты на шелле - это как метапрограммирование в 98 крестах:
1. врядли о нём задумывались при создании
2. выглядит как говно
3. цели не всегда оправдывают средства
Если искать альтернативы, то не совсем понятно, чем заменить передачу данных плейнтекстом и извечный парсинг. Плейнтекст наиболее приятен глазу, но парсить его геморно.
Кмк, проблему могли бы решить S-выражения. Они вполне читабельные, и неплохо подходят для сериализации с минимальным оверхедом. Использование диалекта схемы в качестве интерпретатора позволило бы сильно упростить рутинные задачи вроде парсинга параметров командной строки.
Но не всем ведь нравятся скобочки.
>1. врядли о нём задумывались при создании
Годная метафора. Мне на ум пришла довольно пошлая, не буду озвучивать.
Открыть json файлик в просмотровщике не судьба?