Python URL TypeError:' str'对象不可调用

时间:2017-06-29 15:37:34

标签: python http web httprequest

我正在尝试编写一个小型的Web请求程序来获取一些流行的Instagram用户(这是python 3)。

final_list = [];
for idx in range(1, 5, 1):
    url = "http://zymanga.com/millionplus/" + str(idx) + "f"; # idx is for page number
    print(url);
    headers = {...omitted header details...};
    req = urllib.request.Request(url, None, headers);
    with urllib.request.urlopen(req) as f:
        str = f.read().decode('utf-8');
    initial_list = re.findall(r'target=\"_blank\">([^<]+?)</a>,', str);
    for item in initial_list:
        final_list.append(item);

第一次迭代运行良好(并且我能够在第一页上获得用户),但是在第二次迭代中,我正在编写以下错误:

Traceback (most recent call last):
  File ".\web_search.py", line 8, in <module>
    url = "http://zymanga.com/millionplus/" + str(idx) + "f";
TypeError: 'str' object is not callable

请您告诉我可能导致问题的原因,尝试调试但无法解决问题。谢谢!

3 个答案:

答案 0 :(得分:5)

您已在循环中重新定义str,以便它引用从响应中读取的变量。选择其他名称。

答案 1 :(得分:3)

str = f.read().decode('utf-8')

str是您在上一次循环中读取的文件的内容。您试图将其称为str(idx)的函数,但它不是一个。

不要为自己的变量使用内置函数的名称。

答案 2 :(得分:1)

您在str使用str = f.read().decode('utf-8');作为变量。在下一个循环中,str(idx)不再是类str,而是来自f.read().decode('utf-8')的值。

绝不要将类类型用作变量名。只是为了说明错误:

>>> str
<class 'str'>
>>> str(1)
'1'
>>> str = 'some string'
>>> str
'some string'
>>> str(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable