
Dmitry
01.08.2018
15:00:37

Dmitry
01.08.2018
15:01:23

Dmitry
01.08.2018
15:01:56
Волшебство какое

Dmitry
01.08.2018
15:03:11
и кстати про 10 лет он спиздел :) так то тут в чате много людей помнит, что Жырный еще в 2005 году о программирование за деньги шкварился :) но есть достоверные слухи, что и раньше было дело :)

Google

Ляман
01.08.2018
15:43:18

vlade11115
01.08.2018
15:56:16
Г
Так ловить коннекшн эрроры глупо и бесполезно.
Вместо ловли атрибутеррора перепиши так, чтобы ловить его не приходилось.

Boris
01.08.2018
15:59:32
помню звонкий шлепок тряпки по еблету как сейчас

Dmitry
01.08.2018
16:00:44
ну такое. давай начнем с легкого. в слове "валюта" на английском две буквы "r" :D

Boris
01.08.2018
16:01:06
но в 2006 я уже писал транспорт для атс на твистеде и ездил смотреть гопников в красноярском зоопарке = и все ето без единого юнит теста
кстати 12 лет уже работает
в языке где это сделать сложнее чем в пайтоне ровно в 3 раза (точность до 1 тысячной процента). Вообще тестирование это инструмент разработчика для разработки, а не для гарантии того что что-либо вообще работает.

Stanislav
01.08.2018
16:04:32
Я пишу код без тестов, держу в курсе

Boris
01.08.2018
16:04:46
для этого как димасик сказал выше - есть специально обученные люди QA - они работают на благо бизнеса и в его интересах и в них разбираются. но когда бизнесу похуй - совершенно не важно сколько у тебя тестов

Google

Denis
01.08.2018
16:04:48
Я пишу тесты без кода

Boris
01.08.2018
16:06:20
в этом коде плохо все. например сравнение на наличие в тектсте 404 page not found - а што если там вместо него появится картинка или не будет слова page?

Stanislav
01.08.2018
16:06:44
Да, это прямо пример плохого кода.

Boris
01.08.2018
16:06:44
а шо если не будет html? а што если? а нет способа достать статус пейдж?

Dmitry
01.08.2018
16:07:05

Boris
01.08.2018
16:10:40
а еще скажите мне - какого хера мы в 2018 используем бьютифул соупс
последнее что я на эту тему видел было requests - и оно вроде ок было?
а бле - мы там html парсим. почему не посредством lxml? он вроде умеет.
json(requests.get().text) - это зачем когда есть .get().json()?

Stanislav
01.08.2018
16:12:07

Boris
01.08.2018
16:12:46
ну тут я обосрался да.

Zart
01.08.2018
16:18:57
чем удобнее суп я так и не понял, когда в лхмл есть полновесный хпатх

Boris
01.08.2018
16:20:13
да кстати - requests.get().status (вроде так) - даст информацию о 404
и не надо парсить хтмл страницу на поиск заветной страницы с говном в строке.
http://docs.python-requests.org/en/master/
вон на странице "хттп для людей" (не для кодеманки) даже проверяется статус код. но ничего не меняется - никто нихуя не читает.

Zart
01.08.2018
16:29:53

Boris
01.08.2018
16:31:14
справедливо.

Google

Stanislav
01.08.2018
16:31:18
чем удобнее суп я так и не понял, когда в лхмл есть полновесный хпатх
Мешаниной символов хпазы не очень удобные, методы .find и аргументы которые в них передаются читаются как английский язык.
Плюс БС4 хорошо работает со сломаными хтмлами и есть дополнение которе даже чинит хтмлки, насчет lxml не могу это утверждать.
По скорости примерно то же самое, если юзать lxml как бэкенд, но там есть какие-то маленькие отличия.

Boris
01.08.2018
16:33:14
у lxml есть бекенд работающий с html называется html
html.parse() прекрасно парсит все что мне в жизни попадалось.
мешанина говна написанная в гисте это не английский язык - весь код с xpath схлопнется до пятка строчек, и при желании можно писать тот же find.

Stanislav
01.08.2018
16:37:04
Всё это вопрос привычки.
Вот например у меня щас проектик свободный, надо парсить хмлки. Но поим рассчетам они малы и их парсить надо будет мало. Если бы задача была парсить гигабайты оных - я бы взял какой-то SAX парсер, а так я взял обычный бс и не парюсь.
Привычно и достаточно быстро.

Boris
01.08.2018
16:38:11
намек на то, что каждому милее бутылка на которой он сидит - понятен. однако бсом даже царьт не пользуется, а он старее говна мамонта.

Stanislav
01.08.2018
16:39:10
Блядь, а в итоге мой контрибутор саксом валидирует хмл перед парсом бсом, я чисто сурс посмотрел))

Boris
01.08.2018
16:39:58
трагедия.
на говнохабре писали в 16м - шо для любителей супа в lxml добавили модуль соответствующий.

Zart
01.08.2018
16:42:36

Boris
01.08.2018
16:43:30
вполне себе задача - напизить картинок у магазина конкурента - а потом поверх их ватермарка ебануть свой!

Ляман
01.08.2018
16:44:27

Boris
01.08.2018
16:45:03
задача насрать тебе на лицо за говнокод. что изменилось за 5 лет моего отсутствия?

Stanislav
01.08.2018
16:45:11

Ляман
01.08.2018
16:45:23

Zart
01.08.2018
16:47:56
а мы правда хотим максимально точно узнать его задачу?

vlade11115
01.08.2018
16:52:04
Ну, у меня складывается ощущение, что Asyncio имеет тот же функционал, что и Django, только еще и асинхрон впридачу. Поэтому были мысли с ним ознакомиться

Stanislav
01.08.2018
16:54:54

Vladimir
01.08.2018
20:18:23
Кстати, чем грозит кишение кода трайэксептами? Я на работе говорю, что это побуждает делать хуевый нечитабельный дизайн приложения
Мне говорят что предметная область сложная по другому не сделаешь и вообще иди нахуй

Google

Vladimir
01.08.2018
20:19:46
Где то читал что на производительности пагубно сказывается

vlade11115
01.08.2018
20:20:32
Чем грозят символы в коде? Один символ может сломать весь код, но это не значит что символы это плохо, это значит что нужно думать.
D:\>type r.py
import timeit
def with_try():
try:
a = 1
except Exception:
print(42)
def without_try():
a = 1
print(timeit.timeit(with_try))
print(timeit.timeit(without_try))
D:\>py r.py
0.2150243880056534
0.1781516795695588
D:\>type r.py
import timeit
def with_try_bad():
try:
a = 1/0
except Exception:
pass
def without_try():
a = 1
print(timeit.timeit(with_try_bad))
print(timeit.timeit(without_try))
D:\>py r.py
0.8713011222889889
0.1832707759907798

Zart
01.08.2018
20:22:58
если нужно просто игнорировать исключение, то есть contextlib.suppress

Vladimir
01.08.2018
20:24:36
Там просто развесистая иерархия кастомных исключений на все случаи жизни

Zart
01.08.2018
20:25:46
так речь про try-except?

Vladimir
01.08.2018
20:25:53
Да

Zart
01.08.2018
20:25:55
или таки raise

Admin
ERROR: S client not available

Vladimir
01.08.2018
20:26:25
Они райзятся рандомно
И не менее рандомно ловятся

vlade11115
01.08.2018
20:26:34

AkS
01.08.2018
20:27:08
Сферическая синтетика )

Vladimir
01.08.2018
20:27:36
Мне подсознательно кажется что вместо исключений правильнее возвращать из метода специфическое значение

AkS
01.08.2018
20:27:43
Чем дольше цикл отладки ) тем больше в коде трайэксептов (народная мудрость)

Denis
01.08.2018
20:29:00

Eugine
01.08.2018
20:30:34

Boris
01.08.2018
20:31:41

Google

Vladimir
01.08.2018
20:32:06
А там как

Boris
01.08.2018
20:32:21
а там ты всегда закатываешь солнце вручную

Vladimir
01.08.2018
20:32:40
Там исключений вообще по моему нет

Boris
01.08.2018
20:32:44
вместо исключений возвращаешь error - его проверяешь - вместо try/catch у тебя весь код в if err != nil {return err}
весь код собственно бьется так:
err = kudkuah()
if err !=nil {
return err
}
зачем это говно если вместо 4 строк кода можно писать 1?
сказки про "зато мы все обработаем" не работают = почти нигде их не матчат кроме корня логики - там же и классический try/catch нужно помещать
исключения нигде не бесплатные, их нужно применять там - где из логики нужно терминироваться в направлении окна и выхода через это окно
те исключение - потеря коннекта к базе, провал транзакций
отсутствие объекта в хранилище, для прочего нужно использовать контекст объект.

Vladimir
01.08.2018
20:37:42
Про контекст объект непонел

Boris
01.08.2018
20:38:15
тебе нужно понять чем закончился вызов вверху - ты это можешь сделать или вернув от туда значение или поместив его куда-то в что-то что ты передашь внутрь

Vladimir
01.08.2018
20:38:57
Результат вызова хранить в состоянии контекста?

Boris
01.08.2018
20:39:14
в си у тебя сигнатуры выглядели бы int funcname(object *result)
вместо result был бы контекст в который можно пихать какие-то значения - включая статус код - а возвращать из функции то что она должна вернуть
например можно передать внутрь контекст для шаблонизатора

Vladimir
01.08.2018
20:41:22
Интересные вещи говоришь
А для чего лучше исключения, а для чего контекст?

Boris
01.08.2018
20:43:00
ну вот например ты заполняешь параметры функции
по результатам параметров ожидаешь получить объект какой-то
валидация параметров если производится - должна выкидывать исключение.
контекст используешься в аспекте map/reduce например
если же у тебя return из функции делается экспешеном - то статус код и заполнение контекса значением в случае успешной отработки - лучше эксепшена