如何忽略NameError并继续运行程序的其余部分?

问题描述

我正在使用的代码偶尔会起作用,但是我一直需要一些东西来工作。我正在抓取的网站有时会显示信息,而其他时候却忽略了它,这就是为什么我在运行程序后收到错误消息。由于网站并不总是为某些事件发布时间,因此显然未定义“ event_time”。

我面临的问题是,with suppress(Exception):有时有效,有时却无效。当网站未指定时间并且程序继续抓取网站的其余部分时,我可以添加些什么来跳过event_time?

event_name = s.select_one('.eventname').get_text(strip=True)
event_day = s.select_one('.date').text.strip()
event_month = s.select_one('.month').text.strip()
with suppress(Exception):
    event_time = s.select_one('.time').text.strip()
event_info = s.select_one('.event-header').text.strip()

错误

NameError
Traceback (most recent call last)
<ipython-input-49-45cf21eb3177> in <module>
     22     print('Dia: ' + event_day)
     23     print('Mes: ' + event_month)
---> 24     print('Hora: ' + event_time)
     25     print('Descripción: ' + event_info)
     26     print('-' * 80)

NameError: name 'event_time' is not defined

解决方法

而不是抑制异常

with suppress(Exception): 
    event_time = s.select_one('.time').text.strip() 

抓住它并添加默认值

try:
    event_time = s.select_con('.time').text.strip()
except Exception:
    event_time = ''

捕获一般异常可以隐藏其他错误。最好找出可能发生的异常并将其捕获。

,

您可以使用try-except语句来确保每次都捕获异常。

try:
    event_time = s.select_con('.time').text.strip()
except NameError:
    event_time = ...