2017-10-20 4 views
0

간단한 CLI 앱을 사용하여 날씨 데이터를 검색하려고합니다. 불행히도 나는 초기 단계에 갇혀 있기 때문에 이것으로는별로 멀지 않았다. 이것은 지금까지 내 코드입니다 :pywapi로 사용자 입력에서 위치 ID 가져 오기

도시를 요청
import pywapi, string 

loc=input("What is the city you're closest to?") 
loc=loc.lower 

#this will give you a dictionary of all cities in the world with this city's name Be specific (city, country)! 
loc_id=pywapi.get_location_ids(loc) 
#apparently this is a needed workaround to access last item of dictionary 
for i in loc_id: 
    loc_id=i 

#before I go on to code anything further, I just want to use print to check that I've got the two variables I need 
print (loc,loc_id) 

, 나는 예 또는 런던, 영국 런던을 입력 할 수 있지만, 모두 오류 던져 : (이것은 내 로컬 컴퓨터에)

Traceback (most recent call last): 
    File "get_weather.py", line 7, in <module> 
    loc_id=pywapi.get_location_ids(loc) 
    File "/home/james/.local/lib/python3.4/site-packages/pywapi.py", line 825, in get_location_ids 
    loc_id_data = get_loc_id_from_weather_com(search_string) 
    File "/home/james/.local/lib/python3.4/site-packages/pywapi.py", line 856, in get_loc_id_from_weather_com 
    url = LOCID_SEARCH_URL % quote(search_string) 
    File "/usr/lib/python3.4/urllib/parse.py", line 694, in quote 
    return quote_from_bytes(string, safe) 
    File "/usr/lib/python3.4/urllib/parse.py", line 719, in quote_from_bytes 
    raise TypeError("quote_from_bytes() expected bytes") 
TypeError: quote_from_bytes() expected bytes 
을 내가 Pythonanywhere

을 사용하고 때

그리고 다른이 오류는 것입니다

Traceback (most recent call last): 
    File "/home/pydavith/get_weather.py", line 7, in <module> 
    loc_id=pywapi.get_location_ids(loc) 
    File "/home/pydavith/.local/lib/python3.6/site-packages/pywapi.py", line 825, in get_location_ids 
    loc_id_data = get_loc_id_from_weather_com(search_string) 
    File "/home/pydavith/.local/lib/python3.6/site-packages/pywapi.py", line 852, in get_loc_id_from_weather_co 
m 
    search_string = unidecode(search_string) 
    File "/usr/local/lib/python3.6/dist-packages/unidecode/__init__.py", line 48, in unidecode_expect_ascii 
    bytestring = string.encode('ASCII') 
AttributeError: 'builtin_function_or_method' object has no attribute 'encode' 

사람이 잘못 여기에 무슨 일 어떤 생각을 가지고 있습니까? 나는 duckduckgoed하고 광범위하게 봤 거든,하지만 아무것도 밝혀지지 않았다. 도와 주시면 감사하겠습니다!

+0

두 가지 다른 버전의 Python (3.4 및 3.6)을 사용하고 있으므로 두 가지가 다른 이유를 설명 할 수 있습니다. 오류 자체는 아닙니다. – hwjp

답변

0

좋아, 나는 스스로 해결할 수있는 대답을 얻었습니다. 이 코드를 다른 사람들에게 도움이 될 수 있도록 여기에서 공유하고 있습니다.

여기에서 변경 한 항목이 너무 많아서 어디에서 시작해야하는지 알기가 어렵습니다. 즉, 원래 게시 한 코드에는 많은 오류와 개선이 필요했습니다.

import pywapi 

# getting input from the user regarding location 
#this will give a dictionary of all cities in the world with this city's name 
loc=str.title(input("What is the city you're closest to? ")) 
print("Searching for ", loc) 
loc_id=pywapi.get_location_ids(loc) 
#Now we have a dictionary (it seems as standard it returns a maximum of ten key:value pairs. Now to convert it to a list just so I can number the entries and ultimately allow the user select the correct entry easily. (Note, there may be a way to do this without converting the dictionary to a list, but I couldn't find it) 
loc_list = [ [k,v] for k, v in loc_id.items() ] 

#Now I am going to check if the length of the list is over 1 value (i.e. if there's more than one choice, and if there is, to run a for loop printing each entry with a number 

list_leng=len(loc_list) 
if list_leng >1: 
#fix some value for x and y to be used in the for loop 
    x=1 
    y = 0 
    for l in loc_id: 
     print (x,loc_list[y]) 
     x = x+1 
     y=y+1 
    index_choice=(int(input("Which city do you mean? Enter a choice from 1 to " + str(list_leng) + ": ")))-1 
else: 
    index_choice=0 


loc_id=loc_list[index_choice] 
print("You selected ",loc_id[1]) 
loc_id=loc_id[0] 

print ("Location ID for "+loc+" is ",loc_id) 

def gettt_weather(loc_id): 
    """Fetches the weather information from Weather.com using a location stored under the variable loc_id""" 
    print("Looking up the weather for "+loc) 
    weather_com_result = pywapi.get_weather_from_weather_com(loc_id,units='metric') 
    print ("Weather.com says that it is "+ weather_com_result['current_conditions']['text'].lower()+" and", weather_com_result['current_conditions']['temperature']+"°C now in " + loc) 

gettt_weather(loc_id) 

어쨌든이 기능은 내가 원했던대로 작동하므로 어딘가 초보자에게 유용하기를 바랍니다. 아무도 더 이상의 개선이 있다면 알려주십시오.

관련 문제