Найти - Пользователи
Полная версия: [requests] Зачем нужен with?
Начало » Python для новичков » [requests] Зачем нужен with?
1 2
Xion
Зачем для модуля requests предусмотрена конструкция с with:

import requests
with requests.Session() as s:
  s.get('http://python.su/')

В доках написано что with гарантирует закрытие соединения, но может кто написать реальные примеры использования данной конструкции? Есть ли реальная разница с:
requests.get(...
FishHook
реальный пример

import requests
with requests.Session() as s:
  s.get('http://python.su/')
в этом примере соединение реально закроется по выходе из with.
Xion
Ну я понимаю что оно закроется, но я не понимаю что мешает просто использовать requests.get? ведь результат в обоих случаях будет получен, если присвоить результат переменной
alex925
Xion
requests.get(…
В таком случае у тебя у тебя не создается сессия, закрывать нечего (точнее там в кишках все само происходит).
alex925
Xion
но я не понимаю что мешает просто использовать requests.get?
Сессию используют если нужно сделать не 1 запрос к сайту, а не сколько. Тогда у тебя каждый раз не создается новая сессия и запрос происходит быстрее + если ты на пример в результате сессии авторизуешься на сайте, то куки у тебя будут автоматом посылаться и ты будешь работать как авторизованный пользователь.
Xion
alex925
куки у тебя будут автоматом посылаться
Вот это я и хотел услышать, а то я даже в session делал:
r = s.get...
r2 = s.get... cookies=r.cookies ...
FishHook
Суть в том, что этот код может быть внутри функции. Вызов функции падает с ошибкой, внешний код обрабатывает ошибку и (допустим) сообщает пользователю, что при чтении файла произошёл нежданчик.
Пользователь тыкает кнопку еще раз - и получает еще одну ошибку “Файл уже открыт в другой программе”.
with гарантирует, что файл будет закрыт независимо от того, как отработал ваш вызов функции и повторное его открытие не вызовет неожиданных проблем.
Xion
FishHook
with гарантирует, что файл будет закрыт
with с open для меня ясен, спасибо, у меня по requests был основной вопрос
alex925
Xion
у меня по requests был основной вопрос
а выглядело наоборот….
FishHook
Xion
with с open для меня ясен, спасибо, у меня по requests был основной вопрос
Да какая разница то, мыслите ширее. Что-то будет сделано независимо от действий программиста. В том и дело, чтобы вы не думали о последствиях. Файл вы открываете, слот, соединение какое-то, да что угодно, суть в том, что любые ваши действия внутри with завершатся корректно в отношении контекста with. Вы можете свой класс написать, который будет работать с with. Что будет происходить по выходе из with вашего класса будете знать только вы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB