我正在寻找一个“未找到”的值,但我的代码找不到它。相反,如果值为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
答案 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
之前尝试捕获它。