美しいスープでラムダ関数を使用する

セム

特定のテキストを含むリンクを照合しようとしています。私がやっている

links = soup.find_all('a',href=lambda x: ".org" in x)

しかし、それはTypeErrorをスローします:タイプ 'NoneType'の引数は反復可能ではありません。

それを行う正しい方法は明らかにです

links = soup.find_all('a',href=lambda x: x and ".org" in x)

x andここで追加が必要なのはなぜですか?

アラン-フェイ

単純な理由があり<a>ます。HTMLタグの1つにhrefプロパティがありません


例外を再現する最小限の例を次に示します。

html = '<html><body><a>bar</a></body></html>'
soup = BeautifulSoup(html, 'html.parser')

links = soup.find_all('a', href=lambda x: ".org" in x)
# result:
# TypeError: argument of type 'NoneType' is not iterable

ここで、hrefプロパティを追加すると、例外はなくなります。

html = '<html><body><a href="foo.org">bar</a></body></html>'
soup = BeautifulSoup(html, 'html.parser')

links = soup.find_all('a', href=lambda x: ".org" in x)
# result:
# [<a href="foo.org">bar</a>]

何が起こっているのかというと、BeautifulSoupが<a>タグのhrefプロパティにアクセスしようとしNoneていて、プロパティが存在しない場合に返されます

html = '<html><body><a>bar</a></body></html>'
soup = BeautifulSoup(html, 'html.parser')

print(soup.a.get('href'))
# output: None

これがNone、ラムダで値を許可する必要がある理由です。以来Nonefalsy値であり、コードがx and ...右側防止andときに実行されることから文をxあるNoneあなたがここに見ることができるように、:

>>> None and 1/0
>>> 'foo.org' and 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

これは短絡と呼ばれます。


それは、言ったx and ...のを確認truthiness x、およびNonefalsyと考えています唯一の値ではありません。したがってx、次のNoneように比較する方が正しいでしょう

lambda x: x is not None and ".org" in x

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

美しいスープでラムダ関数を使用する

分類Dev

美しいスープに干渉するランダム</ div>

分類Dev

美しいスープでフォーラムをこする - 引用された返信を除外する方法は?

分類Dev

ラムダ式を使用してJava 8で複数のストリームと.map関数を使用する方法

分類Dev

美しいスープでテーブルヘッダーをこする

分類Dev

ストリームとラムダを使用してforループを美しく

分類Dev

ラムダ関数内で使用される関数内のステートメントを出力しない

分類Dev

美しいスープを使用してクラスの存在を確認する

分類Dev

ラムダ:ラムダの未定義の振る舞いで関数スコープからconst char *をキャプチャします

分類Dev

同じURLを使用する2つの異なるプログラムで同じ結果が見つからない美しいスープ

分類Dev

Pythonで美しいスープを使用してテーブルをこする

分類Dev

美しいスープで次のアイテムを取得する

分類Dev

美しいスープを使用してPythonで `h1id`を取得する

分類Dev

美しいスープでクラスの名前を変更する方法

分類Dev

ランダムな順序で値を返すpromise関数を使用して配列をループするJavascript

分類Dev

キータイプで参照を使用しているときに、ラムダ関数がstd :: lower_boundで機能しないのはなぜですか?

分類Dev

美しいスープを使用してhrefを取得する

分類Dev

テンプレートを使用してラムダを関数に解析する

分類Dev

美しいスープでスキーマをこする?

分類Dev

Kotlinを使用してAndroidでラムダ関数をテストする

分類Dev

AWSラムダ関数でforEachループを待機しています

分類Dev

ラムダ関数を使用してPythonのforループでKeyErrorをキャッチする方法は?

分類Dev

美しいスープオブジェクトでdiffを使用する

分類Dev

美しいスープを使用したスクレイピング:パンダに情報を追加するクラスを見つけます

分類Dev

ラムダ関数pythonでpassinifステートメントを使用する

分類Dev

function()を反復するForループのイテレータの説明?---そして例で使用されているラムダ関数

分類Dev

美しいスープを使用して Web ページから複数のフォームをスクレイピングする

分類Dev

美しいスープでJavascriptを解析するPython

分類Dev

美しいスープで現場をこする

Related 関連記事

  1. 1

    美しいスープでラムダ関数を使用する

  2. 2

    美しいスープに干渉するランダム</ div>

  3. 3

    美しいスープでフォーラムをこする - 引用された返信を除外する方法は?

  4. 4

    ラムダ式を使用してJava 8で複数のストリームと.map関数を使用する方法

  5. 5

    美しいスープでテーブルヘッダーをこする

  6. 6

    ストリームとラムダを使用してforループを美しく

  7. 7

    ラムダ関数内で使用される関数内のステートメントを出力しない

  8. 8

    美しいスープを使用してクラスの存在を確認する

  9. 9

    ラムダ:ラムダの未定義の振る舞いで関数スコープからconst char *をキャプチャします

  10. 10

    同じURLを使用する2つの異なるプログラムで同じ結果が見つからない美しいスープ

  11. 11

    Pythonで美しいスープを使用してテーブルをこする

  12. 12

    美しいスープで次のアイテムを取得する

  13. 13

    美しいスープを使用してPythonで `h1id`を取得する

  14. 14

    美しいスープでクラスの名前を変更する方法

  15. 15

    ランダムな順序で値を返すpromise関数を使用して配列をループするJavascript

  16. 16

    キータイプで参照を使用しているときに、ラムダ関数がstd :: lower_boundで機能しないのはなぜですか?

  17. 17

    美しいスープを使用してhrefを取得する

  18. 18

    テンプレートを使用してラムダを関数に解析する

  19. 19

    美しいスープでスキーマをこする?

  20. 20

    Kotlinを使用してAndroidでラムダ関数をテストする

  21. 21

    AWSラムダ関数でforEachループを待機しています

  22. 22

    ラムダ関数を使用してPythonのforループでKeyErrorをキャッチする方法は?

  23. 23

    美しいスープオブジェクトでdiffを使用する

  24. 24

    美しいスープを使用したスクレイピング:パンダに情報を追加するクラスを見つけます

  25. 25

    ラムダ関数pythonでpassinifステートメントを使用する

  26. 26

    function()を反復するForループのイテレータの説明?---そして例で使用されているラムダ関数

  27. 27

    美しいスープを使用して Web ページから複数のフォームをスクレイピングする

  28. 28

    美しいスープでJavascriptを解析するPython

  29. 29

    美しいスープで現場をこする

ホットタグ

アーカイブ