如何在Python中向字典添加字符串?

时间:2016-01-21 12:53:16

标签: python string list

我试图获取一些http代理并将它们附加到列表中,然后通过用urllib打开它们来单独测试它们但是我得到以下类型错误。我试过包装'代理'在测试函数中使用str()但返回另一个错误。

proxies = []

with open('working_proxies.txt', 'rb') as working_proxies:
    for proxy in working_proxies:
        proxy.rstrip()
        proxies.append(proxy)

def test(proxy):
    try:
        urllib.urlopen(
            "http://google.com",
            proxies={'http': proxy}
        )
    except IOError:
        print "Connection error! (Check proxy)"
    else:
        working_proxy = True

working_proxy = False
while working_proxy == False:
    myProxy = proxies.pop()
    test(myProxy)

我的错误:

Connection error! (Check proxy)
Traceback (most recent call last):
  File "proxy_hand.py", line 26, in <module>
    test(proxy)
  File "proxy_hand.py", line 16, in test
    proxies={'http': proxy}
  File "/usr/lib/python2.7/urllib.py", line 87, in urlopen
    return opener.open(url)
  File "/usr/lib/python2.7/urllib.py", line 193, in open
    urltype, proxyhost = splittype(proxy)
  File "/usr/lib/python2.7/urllib.py", line 1074, in splittype
    match = _typeprog.match(url)
TypeError: expected string or buffer

1 个答案:

答案 0 :(得分:1)

您在此处使用代理 binary 打开文件:

with open('working_proxies.txt', 'rb') as working_proxies:

b模式字符串中的'rb'表示您正在阅读二进制文件,例如bytes个对象。

以文本模式打开文件(并且可能指定除系统默认设置之外的编解码器)或使用显式bytes调用将str个对象解码为bytes.decode()

proxies.append(proxy.decode('ascii'))

我希望ASCII足以解码适合用作代理的主机名。

请注意,您的working_proxy标志不起作用;它未在global中标记为test。也许您想要捕获IOError之外的test异常 ,或者将循环移动到该函数中。当你的代理用完时,你也需要弄清楚你会做什么(所以当它们都不起作用时)。