- 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())
В них хуёвое приведение типов, в Lua оно более логичное.
так здесь нет ошибки, на равно/неравно можно любые объекты сравнивать.
З.Ы. А если close исключение кинет? У вас там вроде на это контракта нет?
Говорит тот, кто даже contextmanager не осилил. В питоне полно убогой непонятной магии, и становится больше с каждым годом.
Создание второго объекта может кинуть исключение. При этом первый уже создан и его надо закрыть. Объясни тупому борманду как это сделать без портянок бойлерплейта.
Слова не мальчика, но жавоёба.
Тому что мне надо класс, который внутри себя открывает и держит джва файла. А не чтобы каждый клиент за него их открывал двойным with'ом.
В винде, имхо, более корректно сделано.
Нет. Нет ничего более тупого, чем "файл занят другим приложением".
З.Ы. В "низкоуровневых" крестах это был бы просто объект с двумя полями.
т.е. роль операционной системы будет выполнять интерпретатор/рунтиме php?! Да Вы, батенька, тролль.
https://habr.com/post/272391/
- если ты пишешь переиспользуемую библиотеку, то делай все аккуратно ручками, цепочка try-catch и все такое. Чай не нуб, должен понимать, что делаешь, и все предусмотреть (в т.ч. и тупого пользователя).
- если ты пишешь на Питоне большую программу, то ССЗБ.
Может, как-то так?
Ну блин, я и ExitStack'ом могу. Только наследование от него, наверное, лучше убрать (просто хранить его в поле).
Я просто не ожидал, что такие тривиальные задачи (открыть и держать джва файла) в этом вашем питоне так сложно решаются. А до 3.3 - ещё хуже.
(а, так это опция Gnu Assembler) Ладно, спасибо, буду знать.
Я о другом - предположим, что стоит такая задача (с ходу не нашел примера лучше). На каком языке писать?
Заметил странное поведение в терминалах на маке. Если вводить строку кириллицей, например, и во время ввода нажимать backspace (и соответственно видеть, как символ удалился), то потом в строковую переменную попадает какая-то белиберда. Пример (тестовая программа на Go):
ввожу "выход"
удаляю последнюю "д"
ввожу буквы так, что получается "выхооод"
удаляю "оод" и ввожу "д"
Вывожу строку, полученную с input'а: "выхо?о?д"
Это я где-то косячу с кодировками?
Я просто написал примитивное приложение на Go (а до этого такая же ерунда была с Racket), которое читает инпут и выводит то, что прочитало.
Походу надо курить что-то типа https://golang.org/pkg/unicode/
Сервер = твоя прога
Я не знаю, может, цари просто вообще не доверяют всяким ReadLine'ам и юзают посимвольный ввод с последующей обработкой.
Кратко поясню суть проблемы. Допустим, борманд хочет написать код для ковыряния гит-паков (не спрашивайте, зачем). Гит-пак состоит из джвух файлов: файл с блобами и файл с индексом. Борманд хочет работать с двумя файлами одновременно через нормальный API в виде класса GitPack.
Обычная питономакака начнёт с чего-то вроде (весь код ниже я не проверял, но суть должна быть ясна) Далее, как бы я сделал это в петоне: Для сравнения, если для ошибок используются исключения, крестобог написал бы это просто как обычный конструктор готово, корректная обработка ошибок.
P.S. Если число ресурсов заранее неизвестно, нужно таки юзать убогий ExitStack.
Ну положи в статический метод, если тебя это волнует
https://ideone.com/GAQG5i
Или функциональненькую рекурсию...
Ойбля, сослепу въебал минус... Прости ...