TypeError:期望字符串或类字节对象,得到'NoneType

0 投票
1 回答
125 浏览
提问于 2025-04-14 17:46
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,并打印一条信息来帮助调试。你可能想根据自己的需要调整错误信息。

希望这能帮到你!

撰写回答