2015-01-25 5 views
0

어떤 이유로이 코드에서 y 변수는 첫 번째 if 문에만 정의되어 있지 않습니다. y이 정의되지 않은 이유를 알아야합니다. 또한 여기에 WOEID을 찾으려면 코드가 필요합니다.y가 정의되지 않은 이유는 무엇입니까?

import urllib2 

def make_word(words): 
    result = "" 
    for i in words: 
     result += i 
    return result 

continents = ['asia', 'north%20america', 'south%20america', 'europe', 'asia', 'australia', 'antarctica'] 
a = raw_input('Put in a place: ') 
a = a.lower() 
if ' ' in a: 
    for h in a: 
     if h == ' ': 
      y = a.replace(' ', '%20') 

page = urllib2.urlopen('http://woeid.rosselliot.co.nz/lookup/%s' % a).read() 
f = page.find('Ohio') 
if y not in continents: 
    if f != -1: 
     start = page.find('woeid="', f) + 7 
     end = page.find('"', start) 
     print 'The WOEID for %s: %s' % (a, page[start:end]) 
    if f == -1: 
     f = page.find('United States') 
     if f != -1: 
      start = page.find('woeid="', f) + 7 
      end = page.find('"', start) 
      print 'The WOEID for %s: %s' % (a, page[start:end]) 
if y in continents: 
    if f == -1: 
     f = page.find('') 
     start = page.find('woeid="', f) + 7 
     print page[start:] 
     end = page.find('"', start) 
     print 'The WOEID for %s: %s' % (a, page[start:end]) 

답변

3

당신은 매우 구체적인 상황에서 y을 정의

if ' ' in a: 
    for h in a: 
     if h == ' ': 
      y = a.replace(' ', '%20') 

그래서에만 a에 공백이있을 경우 어떻게 당신은 y을 생산하고 있습니다.

여기에 새 변수를 만들지 말고 수동으로 URL 인코딩하지 마십시오. urllib.quote() function 대신 사용

from urllib import quote 

y = quote(a.lower()) 

당신은 당신의 코드를 통해 ay을 혼합 한 것으로 나타났습니다. 아마 당신은 여기에 더 의미있는 이름을 사용할 필요가하십시오

place = raw_input('Put in a place: ') 
place_quoted = quote(place.lower()) 
page = urllib2.urlopen('http://woeid.rosselliot.co.nz/lookup/%s' % place_quoted).read() 
if place_quoted not in continents: 
+0

아마도 파이썬 변수에 0 또는 ''와 같은 기본값이 없다는 것을 모릅니다. – Paul

+0

@Paul : 기본값이 있어도 게시 된 코드의 컨텍스트에서는 의미가 없습니다. –

0

에서 ''경우 : #이 조건이 코드에서 실패하고 y 변수/설정을 초기화되지 않았습니다. 하지 대륙에서 Y 경우

:이 줄을 실행할 때, 그것은 Y에 대한 참조가 없습니다 #은

더 나은 코드의 시작에서 기본 값을 초기화 "정의되지 않은"오류가 발생합니다.

예 : y = 없음 (또는) 변수를 올바르게 처리하십시오.

관련 문제