Форум сайта python.su
Зачем для модуля requests предусмотрена конструкция с with:
import requests with requests.Session() as s: s.get('http://python.su/')
requests.get(...
Отредактировано Xion (Янв. 17, 2016 16:13:51)
Офлайн
реальный пример
import requests with requests.Session() as s: s.get('http://python.su/')
Офлайн
Ну я понимаю что оно закроется, но я не понимаю что мешает просто использовать requests.get? ведь результат в обоих случаях будет получен, если присвоить результат переменной
Офлайн
XionВ таком случае у тебя у тебя не создается сессия, закрывать нечего (точнее там в кишках все само происходит).
requests.get(…
Офлайн
XionСессию используют если нужно сделать не 1 запрос к сайту, а не сколько. Тогда у тебя каждый раз не создается новая сессия и запрос происходит быстрее + если ты на пример в результате сессии авторизуешься на сайте, то куки у тебя будут автоматом посылаться и ты будешь работать как авторизованный пользователь.
но я не понимаю что мешает просто использовать requests.get?
Офлайн
alex925Вот это я и хотел услышать, а то я даже в session делал:
куки у тебя будут автоматом посылаться
r = s.get... r2 = s.get... cookies=r.cookies ...
Офлайн
Суть в том, что этот код может быть внутри функции. Вызов функции падает с ошибкой, внешний код обрабатывает ошибку и (допустим) сообщает пользователю, что при чтении файла произошёл нежданчик.
Пользователь тыкает кнопку еще раз - и получает еще одну ошибку “Файл уже открыт в другой программе”.
with гарантирует, что файл будет закрыт независимо от того, как отработал ваш вызов функции и повторное его открытие не вызовет неожиданных проблем.
Офлайн
FishHookwith с open для меня ясен, спасибо, у меня по requests был основной вопрос
with гарантирует, что файл будет закрыт
Офлайн
Xionа выглядело наоборот….
у меня по requests был основной вопрос
Офлайн
XionДа какая разница то, мыслите ширее. Что-то будет сделано независимо от действий программиста. В том и дело, чтобы вы не думали о последствиях. Файл вы открываете, слот, соединение какое-то, да что угодно, суть в том, что любые ваши действия внутри with завершатся корректно в отношении контекста with. Вы можете свой класс написать, который будет работать с with. Что будет происходить по выходе из with вашего класса будете знать только вы.
with с open для меня ясен, спасибо, у меня по requests был основной вопрос
Отредактировано FishHook (Янв. 17, 2016 17:04:55)
Офлайн