- 1
- 2
- 3
- 4
- 5
- 6
- 7
class Test(contextlib.ExitStack):
def __init__(self):
super().__init__()
with contextlib.ExitStack() as s:
self.foo = s.enter_context(Foo())
self.bar = s.enter_context(Bar())
self.enter_context(s.pop_all())
bormand 12.10.2018 00:03 # 0
roman-kashitsyn 12.10.2018 00:06 # +1
bormand 12.10.2018 00:12 # 0
guest8 12.10.2018 00:51 # −999
guest8 12.10.2018 00:20 # −999
guest8 12.10.2018 00:39 # −999
guest8 12.10.2018 08:04 # −999
Morgoth 22.12.2018 12:40 # 0
В них хуёвое приведение типов, в Lua оно более логичное.
KitKat 22.12.2018 13:51 # −102
guest8 22.12.2018 14:16 # −999
AnalBoy 22.12.2018 19:46 # 0
guest8 22.12.2018 20:20 # −999
Morgoth 22.12.2018 12:37 # 0
так здесь нет ошибки, на равно/неравно можно любые объекты сравнивать.
guest8 22.12.2018 20:21 # −999
guest8 12.10.2018 00:37 # −999
bormand 12.10.2018 06:52 # +1
guest8 12.10.2018 08:02 # −999
bormand 12.10.2018 08:05 # 0
guest8 12.10.2018 12:44 # −999
bormand 12.10.2018 13:13 # 0
guest8 12.10.2018 13:18 # −999
bormand 12.10.2018 13:19 # 0
guest8 12.10.2018 13:54 # −999
guest8 12.10.2018 16:04 # −999
bormand 12.10.2018 16:24 # 0
З.Ы. А если close исключение кинет? У вас там вроде на это контракта нет?
guest8 12.10.2018 16:28 # −999
roman-kashitsyn 12.10.2018 18:14 # 0
Говорит тот, кто даже contextmanager не осилил. В питоне полно убогой непонятной магии, и становится больше с каждым годом.
guest8 12.10.2018 20:57 # −999
bormand 12.10.2018 16:27 # 0
guest8 12.10.2018 16:28 # −999
bormand 12.10.2018 07:05 # 0
guest8 12.10.2018 08:05 # −999
bormand 12.10.2018 08:10 # +1
guest8 12.10.2018 08:12 # −999
bormand 12.10.2018 08:14 # 0
bormand 12.10.2018 08:28 # +1
Создание второго объекта может кинуть исключение. При этом первый уже создан и его надо закрыть. Объясни тупому борманду как это сделать без портянок бойлерплейта.
bormand 12.10.2018 08:47 # 0
guest8 12.10.2018 10:43 # −1
bormand 12.10.2018 11:52 # 0
Слова не мальчика, но жавоёба.
Тому что мне надо класс, который внутри себя открывает и держит джва файла. А не чтобы каждый клиент за него их открывал двойным with'ом.
guest8 12.10.2018 12:47 # −3
bormand 12.10.2018 12:52 # +1
default 12.10.2018 12:39 # 0
guest8 12.10.2018 12:48 # −999
bormand 12.10.2018 12:50 # +1
guest8 12.10.2018 12:54 # −999
bormand 12.10.2018 12:57 # 0
В винде, имхо, более корректно сделано.
guest8 12.10.2018 13:01 # −999
guest8 12.10.2018 16:02 # −999
roman-kashitsyn 12.10.2018 18:12 # 0
Нет. Нет ничего более тупого, чем "файл занят другим приложением".
guest8 12.10.2018 18:15 # −999
1024-- 22.12.2018 23:03 # 0
guest8 12.10.2018 18:17 # −999
default 12.10.2018 18:42 # 0
guest8 12.10.2018 20:56 # −999
guest8 12.10.2018 14:43 # −999
guest8 12.10.2018 16:02 # −999
guest8 12.10.2018 08:00 # −999
bormand 12.10.2018 08:07 # +2
З.Ы. В "низкоуровневых" крестах это был бы просто объект с двумя полями.
guest8 12.10.2018 10:45 # −999
CHayT 12.10.2018 12:59 # +1
bormand 12.10.2018 13:17 # +1
CHayT 12.10.2018 13:27 # 0
bormand 12.10.2018 13:44 # 0
DOKTOPuHXO 12.10.2018 14:10 # 0
т.е. роль операционной системы будет выполнять интерпретатор/рунтиме php?! Да Вы, батенька, тролль.
guest8 12.10.2018 14:40 # −999
guest8 12.10.2018 16:02 # −999
guest8 12.10.2018 16:05 # −999
guest8 12.10.2018 16:06 # −999
guest8 12.10.2018 16:13 # −999
guest8 12.10.2018 16:21 # −999
guest8 12.10.2018 17:18 # −999
guest8 12.10.2018 17:32 # −999
guest8 12.10.2018 18:12 # −999
guest8 12.10.2018 18:15 # −999
guest8 12.10.2018 19:16 # −999
guest8 12.10.2018 20:54 # −999
Steve_Brown 12.10.2018 18:43 # 0
guest8 12.10.2018 20:55 # −999
guest8 12.10.2018 16:07 # −999
guest8 12.10.2018 16:13 # −999
guest8 12.10.2018 19:20 # −999
guest8 12.10.2018 19:38 # −999
guest8 15.10.2018 17:59 # −999
CHayT 12.10.2018 13:45 # 0
guest8 12.10.2018 13:55 # −999
DOKTOPuHXO 12.10.2018 14:15 # 0
3oJIoTou_xyu 12.10.2018 14:41 # 0
https://habr.com/post/272391/
DOKTOPuHXO 12.10.2018 14:10 # 0
guest8 12.10.2018 16:12 # −999
Steve_Brown 12.10.2018 10:43 # 0
- если ты пишешь переиспользуемую библиотеку, то делай все аккуратно ручками, цепочка try-catch и все такое. Чай не нуб, должен понимать, что делаешь, и все предусмотреть (в т.ч. и тупого пользователя).
- если ты пишешь на Питоне большую программу, то ССЗБ.
Может, как-то так?
bormand 12.10.2018 12:06 # 0
Ну блин, я и ExitStack'ом могу. Только наследование от него, наверное, лучше убрать (просто хранить его в поле).
Я просто не ожидал, что такие тривиальные задачи (открыть и держать джва файла) в этом вашем питоне так сложно решаются. А до 3.3 - ещё хуже.
Steve_Brown 12.10.2018 12:29 # +1
guest8 12.10.2018 16:10 # −999
Steve_Brown 12.10.2018 18:50 # 0
bormand 12.10.2018 18:53 # 0
Steve_Brown 15.10.2018 12:21 # 0
(а, так это опция Gnu Assembler) Ладно, спасибо, буду знать.
Я о другом - предположим, что стоит такая задача (с ходу не нашел примера лучше). На каком языке писать?
roman-kashitsyn 15.10.2018 12:27 # 0
guest8 15.10.2018 12:44 # −999
guest8 15.10.2018 12:58 # −999
bormand 15.10.2018 17:28 # 0
guest8 15.10.2018 17:30 # −999
bormand 15.10.2018 17:30 # 0
guest8 15.10.2018 18:43 # −999
guest8 15.10.2018 18:46 # −999
guest8 15.10.2018 18:47 # −999
guest8 15.10.2018 12:54 # −999
guest8 15.10.2018 12:56 # −999
guest8 15.10.2018 13:02 # −999
guest8 15.10.2018 13:05 # −999
guest8 15.10.2018 13:09 # −999
guest8 15.10.2018 13:34 # −999
Desktop 12.10.2018 13:38 # 0
Заметил странное поведение в терминалах на маке. Если вводить строку кириллицей, например, и во время ввода нажимать backspace (и соответственно видеть, как символ удалился), то потом в строковую переменную попадает какая-то белиберда. Пример (тестовая программа на Go):
ввожу "выход"
удаляю последнюю "д"
ввожу буквы так, что получается "выхооод"
удаляю "оод" и ввожу "д"
Вывожу строку, полученную с input'а: "выхо?о?д"
Это я где-то косячу с кодировками?
bormand 12.10.2018 13:41 # 0
Desktop 12.10.2018 13:46 # 0
Я просто написал примитивное приложение на Go (а до этого такая же ерунда была с Racket), которое читает инпут и выводит то, что прочитало.
Походу надо курить что-то типа https://golang.org/pkg/unicode/
bormand 12.10.2018 13:52 # 0
Сервер = твоя прога
Desktop 12.10.2018 13:54 # 0
bormand 12.10.2018 13:55 # 0
Desktop 12.10.2018 13:58 # 0
Я не знаю, может, цари просто вообще не доверяют всяким ReadLine'ам и юзают посимвольный ввод с последующей обработкой.
guest8 12.10.2018 16:22 # −999
roman-kashitsyn 12.10.2018 14:40 # +3
Кратко поясню суть проблемы. Допустим, борманд хочет написать код для ковыряния гит-паков (не спрашивайте, зачем). Гит-пак состоит из джвух файлов: файл с блобами и файл с индексом. Борманд хочет работать с двумя файлами одновременно через нормальный API в виде класса GitPack.
Обычная питономакака начнёт с чего-то вроде (весь код ниже я не проверял, но суть должна быть ясна) Далее, как бы я сделал это в петоне: Для сравнения, если для ошибок используются исключения, крестобог написал бы это просто как обычный конструктор готово, корректная обработка ошибок.
P.S. Если число ресурсов заранее неизвестно, нужно таки юзать убогий ExitStack.
bormand 12.10.2018 15:04 # 0
roman-kashitsyn 12.10.2018 18:11 # 0
Ну положи в статический метод, если тебя это волнует
bormand 12.10.2018 21:05 # 0
bormand 12.10.2018 21:09 # 0
bormand 12.10.2018 21:48 # 0
https://ideone.com/GAQG5i
bormand 12.10.2018 15:10 # 0
Или функциональненькую рекурсию...
guest8 12.10.2018 15:59 # −999
guest8 12.10.2018 16:31 # −999
DOKTOPuHXO 12.10.2018 16:38 # −1
Ойбля, сослепу въебал минус... Прости ...
guest8 01.11.2018 23:04 # −999
O4epegHou_nemyx 10.02.2019 17:58 # 0