该soup.find()
方法没有找到匹配的标签,并返回None
.
项目[...]
访问语法寻找一个__getitem__
方法,这是AttributeError
这里的来源:
>>> None[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object has no attribute '__getitem__'
显式测试None
:
Version = soup.find("meta", {"name":"generator"})
if Version is not None:
Version = Version['content']
else:
print "Not found"
如果您使用括号对异常进行分组,您的异常处理也将起作用:
try:
Version = soup.find("meta", {"name":"generator"})['content']
except (NameError, TypeError):
print "Not found"
如果没有括号,您是在告诉 Python 捕获NameError
异常并将生成的异常对象分配给本地名称TypeError
。此except Exception, name:
语法已被弃用,因为它可能会导致您认为自己遇到两个异常的情况。
但是,您的代码不应抛出NameError
异常;这将是一个单独的问题,通过正确实例化变量可以更好地解决;以下内容在这里也可以正常工作:
try:
Version = soup.find("meta", {"name":"generator"})['content']
except TypeError:
# No such meta tag found.
print "Not found"