2016-08-15 92 views
1

我想要做一個非常簡單的服務來收集和打印Python中的RESTfull API的數據。 這是我的代碼有:爲什麼Pycharm在這種情況下顯示字典方法?

import requests 
import json 

response = requests.get("url") 
data2 = response.json() 
print type(data2) 

這裏是我的問題:當我打印數據2類型,它告訴我這是一個字典,所以當我做data2.(注意點)我的IDE應該給我一個系列像len(),cmp(),str()等方法供我選擇。但沒有出現。 同樣的事情發生在我身上使用Atom。 要清楚,如果我寫data2.len(),它不會說它是一個錯誤,所以它識別的方法。但它並不表明他們的建議。

我應該如何解決這個問題?非常感謝。

+2

pycharm不知道數據2是一個字典,因爲請求不聲明返回類型。打印時,類型在運行時進行評估。 IDE需要靜態類型。如果你輸入'data2 = dict()'或'variable = []',那麼你將完成。 – njzk2

+0

@ njzk2,謝謝你的回答。我嘗試了你的建議。如果我在data2 = response.json()之前執行'data2 = []',然後嘗試'data2(dot)',所有方法都會顯示出來。但是,如果我以後做,它不起作用。 –

+0

是的,因爲在這一點上引用已經改變,並且pycharm *不能*知道類型。這裏沒有什麼可以做的。 – njzk2

回答

0

PyCharm的無法顯示你所提到的方法表示無法推斷單從代碼中的變量的類型。這通常表示代碼可能沒有準備好在所有情況下都正確處理該變量的數據(在許多情況下,這意味着錯誤的代碼)。

你的代碼打印類型dict某次執行並不意味着它會永遠的事實dict(否則PyCharm就已經能夠推斷出類型)。

使代碼更好地準備在任何情況下處理變量的數據 - 將使類型可推出,這也將允許PyCharm正確填寫數據。

例如,你可以寫你這樣的代碼:

response = requests.get("url") 
data2 = response.json() 
assert isinstance(data2, dict) 
print type(data2) # here data2's methods would be listed 

,或者

response = requests.get("url") 
data2 = response.json() 
if isinstance(data2, dict): 
    print type(data2) # here data2's methods would be listed 
2

由於在評論中提到PyCharm不知道類型,因爲requests沒有聲明返回類型。但它可能在這裏使用類型評論(見PEP-484):

response = requests.get("url") 
data2 = response.json() # type: dict 
print(type(data2)) 
相關問題