TypeError:期望字符串或类字节对象,得到'NoneType
import requests
import selectorlib
URL = "http://programmer100.pythonanywhere.com/tours/"
def scrape(url):
response = requests.get(url, HEADERS)
source = response.text
return source
def extract(source):
extractor = selectorlib.Extractor.from_yaml_file("extract.yaml")
value = extractor.extract(source)["tours"]
return value
if __name__ == "__main__":
scraped = scrape(URL)
extracted = extract(scraped)
print(extracted)
这段代码出现了类型错误。
类型错误:期望得到字符串或类似字节的对象,但得到了'NoneType'。追踪信息(最近的调用在最前面): 文件 "D:\Python course\scraping-music-band\main.py",第24行,在 extracted = extract(scraped) ^^^^^^^^^^^^^^^^ 文件 "D:\Python course\scraping-music-band\main.py",第18行,在 extract value = extractor.extract(source)["tours"] ^^^^^^^^^^^^^^^^^^^^^^^^^
1 个回答
2
这个错误的意思是,有个函数本来应该接收一个字符串,但它却收到了一个空值(None)。在你的代码中,这个错误很可能是因为 extractor.extract(source) 这个调用返回了 None,而你又试图去访问 None 的 "tours" 这个键。
你可以试试下面这几行代码来处理这个错误:
def extract(source):
extractor = selectorlib.Extractor.from_yaml_file("extract.yaml")
data = extractor.extract(source)
if data is None:
print("No data could be extracted from the source.")
return None
value = data.get("tours")
if value is None:
print("No 'tours' could be found in the extracted data.")
return None
return value
这段代码会在尝试访问任何键之前,先检查数据和数值是否为 None,并打印一条信息来帮助调试。你可能想根据自己的需要调整错误信息。
希望这能帮到你!