在try-except块中定义的未定义变量

时间:2013-01-11 16:36:21

标签: python python-2.7

我使用以下代码从网页http://ajaxian.com中删除XFN内容 但我得到未定义的变量错误:

我的代码如下:

'''
Created on Jan 11, 2013

@author: Somnath
'''
# Scraping XFN content from a web page
# -*-coding: utf-8 -*-

import sys
import urllib2
import HTMLParser
from BeautifulSoup import BeautifulSoup

# Try http://ajaxian.com
URL = sys.argv[0]

XFN_TAGS = set([
            'colleague',
            'sweetheart',
            'parent',
            'co-resident',
            'co-worker',
            'muse',
            'neighbor',
            'sibling',
            'kin',
            'child',
            'date',
            'spouse',
            'me',
            'acquaintance',
            'met',
            'crush',
            'contact',
            'friend',
            ])


try:
    page = urllib2.urlopen(URL)
except urllib2.URLError:
    print 'Failed to fetch ' + item

try:
    soup = BeautifulSoup(page)
except HTMLParser.HTMLParseError:
    print 'Failed to parse ' + item

anchorTags = soup.findAll('a')

for a in anchorTags:
    if a.has_key('rel'):
        if len(set(a['rel'].split()) & XFN_TAGS) > 0:
            tags = a['rel'].split()
            print a.contents[0], a['href'], tags

我的代码中有两个try块,它给出了一个错误未定义的变量:item。如果我想重新包含try-except块,我应该在try块外面给出变量的空白定义吗?

P.S:请注意,这是一本书后面的标准代码。而且我希望他们不会犯这样一个微不足道的错误。我在这里弄错了吗?

3 个答案:

答案 0 :(得分:2)

假设您要打印无法加载的网址,请尝试将其更改为print 'Failed to fetch ' + URL。你实际上并没有在任何地方定义item,所以Python不知道你的意思:

try:
    page = urllib2.urlopen(URL)
except urllib2.URLError:
    print 'Failed to fetch ' + URL

在第二个区块中,也将item更改为URL(假设您要显示的错误显示的是网址而不是内容)。

try:
    soup = BeautifulSoup(page)
except HTMLParser.HTMLParseError:
    print 'Failed to parse ' + URL

答案 1 :(得分:2)

print 'Failed to fetch ' + item

项目不是定义任何地方。我想你想在那里打印URL。

根据python tutorial

  

变量必须在被使用之前被“定义”(赋值),否则将发生错误:

答案 2 :(得分:0)

您没有定义变量'item'。这就是导致错误的原因。您必须在使用之前定义变量。