AttributeError:'NoneType'对象没有属性'text'Python

时间:2018-10-15 17:08:29

标签: python

我正在尝试使用python读取文件并获取每一行作为函数的参数。我有一个AttributeError:'NoneType'对象没有属性'text'错误,并且我不知道如何解决它。这是我的代码

from requests import get
from bs4 import BeautifulSoup


file = open("applications.txt","r")
appArray = file.readlines()


def app_metadata(app_link):
    url = 'https://play.google.com/store/apps/details?id=' + app_link
    response = get(url)
    html_soup = BeautifulSoup(response.text, 'html.parser')
    print(html_soup.find(class_="AHFaub").text)


#print (appArray[0])
#print(type(appArray[0]))
#print(type("com.codebrewgames.pocketcitygame"))
app_metadata(appArray[2])

2 个答案:

答案 0 :(得分:1)

使用

appArray = [line.rstrip() for line in open('applications.txt')]                                                                                                     

每个字符串的末尾都有换行符。 Readlines返回每个行字符串,末尾带有换行符。并且请求将appId与换行符一起使用。类似于“ com.android.chrome \ n”,而不是“ com.android.chrome”。

答案 1 :(得分:0)

以下是您的错误来源:

print(html_soup.find(class_="AHFaub").text)

html_soup.find(class_="AHFaub")在解析响应时找不到所需的节,因此返回None。一种解决方法是:

result = html_soup.find(class_="AHFaub")
if result:
    print(result.text)

这将在尝试打印之前检查是否有有效的结果。这被认为是LBYL(飞跃前请先看)方法。

一种更Python化的方法是遵循以下EAFP(更容易要求宽恕而不是许可)方法:

try:
    print(html_soup.find(class_="AHFaub").text)
except AttributeError:
    print('Failed to parse url: {}'.format(url))

此方法尝试执行打印,如果由于AttributeError而失败,它将跳过并执行except块中的所有代码。