Try/except 未按预期工作:"Except" 错误消息附加到传递结果

Try/except not working as expected: "Except" error message is appended to passing result

我的代码旨在在网页上查找图表并创建一个 link 用于从中进行网络抓取。如果找不到图表,那么我会输入一个 try/except 来打印一条带有相应(播放器)link 的消息,因此如果找不到,它会继续下一个。

它来自一个足球估值网站,为了调试,我减少了两名球员的名单:一个是 Kylian Mbappé(他的页面上有图表并且应该通过)和另一个 Ansu Fati(没有) .尝试使用 BeautifulSoup 从 Ansu Fati 的个人资料中获取图表标签会导致 NoneType 错误。

这里的问题是 Mbappé 的图表 link 确实在代码中被提取用于下游处理,但是 except 子句中的 "except" error/link 消息也被打印到安慰。应该只有安苏·法提才会这样。

这是代码

final_url_list = ['https://www.transfermarkt.us/kylian-mbappe/profil/spieler/342229','https://www.transfermarkt.com/ansu-fati/profil/spieler/466810']

for i in final_url_list:

    try:
        int_page = requests.get(i, headers = {'User-Agent':'Mozilla/5.0'}).text

    except requests.exceptions.Timeout:
        sys.exit(1)

    parsed_int_page = BeautifulSoup(int_page,'lxml')


    try:
        graph_container = parsed_int_page.find('div', class_='large-7 columns small-12 marktwertentwicklung-graph')
        graph_a = graph_container.find('a')
        graph_link = graph_a.get('href')
        final_url_list.append('https://www.transfermarkt.us' + graph_link)
    except:
        pass
        print("Graph error:" + i)

我尝试使用 PyCharm 的调试来查看解释器是如何执行这些步骤的,似乎整个 except 子句都被跳过了,但是当我在控制台中 运行 它时, "Graph error: link" 为两者发布。我不确定 try/except 问题以这种方式表现的代码有什么问题。

except None:

正在寻找类型为 None 的异常,这是不可能的。

尝试将该行更改为

except AttributeError:

这样做会产生以下输出:

Graph error:https://www.transfermarkt.com/ansu-fati/profil/spieler/466810
Graph error:https://www.transfermarkt.us/kylian-mbappe/marktwertverlauf/spieler/342229

这里还有一个额外的问题,您正在修改要迭代的列表,这不仅是不好的做法,而且会导致您看到的意外行为。

因为您要追加到您正在迭代的列表,所以您将为 url 添加一个您实际上不想抓取的迭代。要解决此问题,请将脚本中的前几行更改为:

url_list = ['https://www.transfermarkt.us/kylian-mbappe/profil/spieler/342229','https://www.transfermarkt.com/ansu-fati/profil/spieler/466810']
final_url_list = []

for i in url_list:

这样,您将图表链接附加到不同的列表,并且您不会尝试抓取不应该抓取的链接。这会将所有 "graph links" 放入 final_url_list