Найти - Пользователи
Полная версия: строковые переменые
Начало » Python для новичков » строковые переменые
1
nick789
 import urllib3
my_header_1={"User-Agent": "999999"}
ua="'User-Agent': '9999999999'"
my_header_2="{"+ua+"}"
http=urllib3.PoolManager()
r=http.request('GET', BASE_URL, headers=my_header_1) # все нормально выполняется

 r=http.request('GET', BASE_URL, headers=my_header_2) # выдает ошибку

     r=http.request('GET', BASE_URL, headers=my_header_2)
  File "/usr/lib/python3/site-packages/urllib3/request.py", line 69, in request
    **urlopen_kw)
  File "/usr/lib/python3/site-packages/urllib3/request.py", line 90, in request_encode_url
    return self.urlopen(method, url, **extra_kw)
  File "/usr/lib/python3/site-packages/urllib3/poolmanager.py", line 165, in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
  File "/usr/lib/python3/site-packages/urllib3/connectionpool.py", line 558, in urlopen
    headers = headers.copy()
AttributeError: 'str' object has no attribute 'copy'

визуально, если их выводить через print строки одинаковы.
надо привести их к какому то типу?
JOHN_16
Передавайте в request header в виде словаря, не надо извращаться с конкатенацией строк.
ZerG
my_header_2=“{”+ua+“}” = будет строка а не словарь

 ua = "'User-Agent': '9999999999'"
my_header_2 = "{" + ua + "}"
print type(my_header_2)
<type 'str'>

Раз уже хотите параметры вносить - вносите правильно
 # -*- coding: utf-8 -*-
my_header_2 = {}
my_header_2['User-Agent'] = '9999999999'
my_header_2['User-HER'] = '0000000'
print type(my_header_2), my_header_2
<type 'dict'> {'User-HER': '0000000', 'User-Agent': '9999999999'}
realivan
В первом случае у тебя словарь, а во втором действительно обычная строка. Сделай по аналогии с первым заголовком и все.
nick789
ясно, сейчас попробую…
вопрос такой, как я мог(должен был) узнать тип переменной ?
смотрел сюда:
https://urllib3.readthedocs.io/en/latest/user-guide.html
там упоминания о типе словарь нету. или я что то пропустил??
извините за въедливость…
ZerG
 r.headers
HTTPHeaderDict({'Content-Length': '33', ...})
nick789
а логика моих действий, какая должна была быть?
что бы выйти на это результат.
ZerG
у вас на уровне костного мозга должно быть понимание типов переменных питона
 {'Content-Length': '33', ...}
{} - словарь
[] - список
() - кортеж
"" - строка
И так далее
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