2017-05-21 13 views
-2

JSONを返すようにしていますので、戻り値を変数に格納できますが、JSON変数は印刷されますが値は返されません。 または、グローバル変数以外のこれらの変数を他の関数にフェッチする方法があります。関数からJSON値を返しますが、関数から返さないようにしてください。

CODE

import json 
import urllib.request 

class Weather: 
    def set_api(self): 
     url = 'http://api.wunderground.com/api/8187218c2aca04ca/geolookup/conditions/q/IA/Cedar_Rapids.json' 
     f = urllib.request.urlopen(url) 
     json_string = f.read() 
     parsed_json = json.loads(json_string) 
     location = parsed_json['location']['city'] 
     temp_c = parsed_json['current_observation']['temp_c'] 
     print (location, temp_c)        #WORKING 
     return location,temp_c        #NOT WORKING 
     f.close() 

myweather = Weather() 
myweather.set_api() 

OUTPUT

Cedar Rapids 10.2 #print output 
+0

また ' – stamaimer

+0

、' f.close() 'が実行されることはありません '位置、temp_c = myweather.set_api()を使用してみてください。あなたは 'with'を使うべきです。 – DeepSpace

答えて

-1

到達不能である私はそれを返していましたコードは固定ではなく、それは変数に保存し、印刷したり、他の関数に渡す必要がありました。 実際にはJSON全体が必要に応じて必要なフィールドをリスト辞書から取得したかったのです。

CODE

import json 
import urllib.request 

class Weather: 
    def set_api(self): 
     url = 'http://api.wunderground.com/api/8187218c2aca04ca/geolookup/conditions/q/IA/Cedar_Rapids.json' 
     f = urllib.request.urlopen(url) 
     json_string = f.read() 
     parsed_json = json.loads(json_string) 
     return parsed_json        
     f.close() 

myweather = Weather() 
yoweather = myweather.set_api() 
print(yoweather['location']['city'],yoweather['current_observation']['temp_c']) 

OUTPUT

Cedar Rapids 10.0 
1

あなたが値を返すが、それを廃棄しています。として修正する必要があります。

myweather = Weather() 
location, temp_c = myweather.set_api() 

さようなら道、あなたのf.closeは

return location,temp_c        # WORKING 
    f.close() 
+0

提案ありがとうございます。 –

関連する問題