2017-06-29 101 views
-1

我正在嘗試編寫一個小型web請求程序來獲得一些流行的Instagram用戶(這是python 3)。Python URL TypeError:'str'對象不可調用

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); 

第一次迭代效果很好(和我能夠得到第一頁上的用戶),但是在第二次迭代,我encounting以下錯誤:

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 

請你讓我知道什麼可能導致問題,試圖調試但無法解決它。謝謝!

+0

嘗試'url =「http://zymanga.com/millionplus/".join(idx)+」f「'; – PYA

回答

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 
+0

謝謝指出! –

5

您已在循環中重新定義str,以便它引用從響應中讀取的變量。選擇一個不同的名字。

+0

謝謝指出! –

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

str是您在上一次通過循環時讀取的文件的內容。您試圖將其稱爲str(idx),但它不是一個。

請勿爲自己的變量使用內置函數的名稱。

+0

謝謝指出! –