为什么没有定义?

时间:2015-01-25 15:46:25

标签: python python-2.7 urllib2

在此代码中,由于某种原因,仅为第一个y语句定义变量if。我需要知道为什么它说y没有定义。此外,如果您需要代码来查找WOEID,请执行此操作。

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

2 个答案:

答案 0 :(得分:3)

您只能在非常具体的情况下定义y

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

因此,只有a中有空格才能生成y

不要在此处创建新变量,也不要手动进行网址编码。改为使用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:

答案 1 :(得分:0)

如果''在:#This条件在您的代码中失败,y变量未初始化/设置。

如果你不在大陆:#当这一行执行时,它没有y的引用,抛出错误“undefined”

最好在代码开头初始化默认值。

例如:y =无(或)正确处理您的变量。