メソッドはsoup.find()
一致するタグを見つけられず、 を返しNone
ました。
[...]
item アクセス構文は、ここ__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"
括弧がないNameError
と、例外をキャッチし、結果の例外オブジェクトをローカル名に割り当てるように Python に指示していますTypeError
。このexcept Exception, name:
構文は、2 つの例外をキャッチしていると思われる状況につながる可能性があるため、推奨されていません。
NameError
ただし、ここでのコードは例外をスローすべきではありません。これは、変数を適切にインスタンス化することで解決できる別の問題になります。以下は、ここでも同様に機能します。
try:
Version = soup.find("meta", {"name":"generator"})['content']
except TypeError:
# No such meta tag found.
print "Not found"