美丽的汤4 .string()'NoneType'对象不可调用

时间:2016-11-15 16:33:54

标签: python python-3.x beautifulsoup nonetype bs4

from bs4 import BeautifulSoup
import sys

soup = BeautifulSoup(open(sys.argv[2]), 'html.parser')
print(soup.prettify)

if sys.argv[1] == "h":
    h2s = soup.find_all("h2")
    for h in h2s:
        print(h.string())

第一个印刷声明(作为测试添加)有效 - 所以我知道BS4正在工作,一切。 第二个打印语句抛出:

File "sp2gd.py", line 40, in <module>
    print(h.string())
TypeError: 'NoneType' object is not callable

1 个答案:

答案 0 :(得分:2)

BeautifulSoup的.string是一个属性,而不是一个可调用的方法,当元素的内容没有单一的,明确的字符串表示时(例如,当它包含多个子元素时),它的值为{{ 1}} - 因此错误信息。

None之后丢失括号(),您将不会收到错误:

h.string

...虽然如果if sys.argv[1] == "h": h2s = soup.find_all("h2") for h in h2s: print(h.string) # no parentheses 元素有多个孩子,结果可能不会特别有启发性。在这种情况下,.strings and .stripped_strings会派上用场:

h2