0

初心者向けの演習では、html ファイルでメタ タグを見つけてジェネレーターを抽出しようとしているので、次のようにしました。

Version = soup.find("meta", {"name":"generator"})['content']

そして、私はこのエラーがあったので:

TypeError: 'NoneType' object has no attribute '__getitem__'

例外を扱うことで修正できると思っていたので、次のように書きました。

try: Version = soup.find("meta", {"name":"generator"})['content']

except NameError,TypeError:

     print "Not found"

私が得たのは同じエラーです。

じゃあどうすればいいの?

4

2 に答える 2

7

メソッドは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"
于 2013-11-07T15:46:35.693 に答える
4

これを試して:

content = None
Version = soup.find("meta", {"name":"generator"})
if Version:
    content = Version.get('content') 
    #or even
    #Version = Version.get('content')
else:
    print "Not found"

問題は、一致が見つからない場合にsoup.find返され、結果からデータを抽出するとエラーが発生することです。NoneNone

于 2013-11-07T15:46:49.047 に答える