python检查值不起作用

时间:2013-09-13 08:03:26

标签: python python-2.7 python-3.x

我正在寻找一个“未找到”的值,但我的代码找不到它。相反,如果值为Not Found,则只会崩溃

这是代码

for key, value in productLinks.iteritems():
        if value is "Not Found":
                 print value
        else:
                 print value
                 html = urllib2.urlopen(value)
                 soup = BS(html)
                 foundPrice = soup.find('s')
                 if found is not None:
                        print "found a price"
                 else:
                        print" No Lunk"

这是错误

Traceback (most recent call last):
  File "asimsScrapper.py", line 28, in <module>
    html = urllib2.urlopen(value)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 386, in open
    protocol = req.get_type()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 248, in get_type
    raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type: Not found

3 个答案:

答案 0 :(得分:4)

is关键字用于身份比较,类型检查。

您可能想要使用==

if value == "Not Found"

此外,您可以验证网址,而不是检查Not Found(或Not found)字符串,如下所示:

for key, value in productLinks.iteritems():
    if value.startswith('http'):
         print value
         html = urllib2.urlopen(value)
         ...

或者,更好地使用urlparse来验证网址。

另见:

答案 1 :(得分:1)

错误:

html = urllib2.urlopen(value),
unknown url type: Not found

您正在尝试打开url = "Not found"

根本原因是:value is "Not found",请使用:value == "Not found"

答案 2 :(得分:0)

alecxe是正确的,你应该使用==检查价值等值,但他的理由是错误的。如有疑问,请始终使用==测试等效性 - is只测试身份,这与等效性不同。身份更多地与内存中存储内容的位置有关,而不是内存中的值。在SO和其他地方有很多地方可以阅读这些内容,但有一点是is不是==

您的错误似乎与此无关。如果你尝试urllib2.urlopen("not found")它肯定会给你这个错误。您希望在将其传递给urllib2之前尝试捕获它。