【发布时间】:2019-11-13 19:10:08
【问题描述】:
我正在尝试做的事情:我实际上是在运行一个带有 ID 列表的搜索过程。那些由于某种原因失败的,我附加到一个单独的列表中,以便我可以选择重新运行那些在一些不同参数下的。
我是如何做到的:
# Defining the customer ID list and a list for failed searches
customer_IDs = [1,2,3,4,5]
failed_IDs = []
# Looping the search procedure for all IDs in the original list
for customerid in customer_IDs:
try:
search_procedure(customerid)
except:
failed_IDs.append(customerid)
pass
if len(failed_IDs) > 0:
print("There were " + str(len(failed_IDs)) + " customers that were not found")
我的期望是,例如,一旦代码未能找到客户 1,它将恢复剩余 4 的循环,然后才去评估列表在 if 语句中的长度。但是,第一个ID没有找到后,直接进入if部分。
我尝试使用pass 和continue 重置代码,但仍然保持相同的行为。
为什么我知道循环不会继续:本质上是因为这是一次使用 Selenium 进行网络抓取的尝试。我正在使用客户 ID 自动执行搜索、导航和下载一系列文档的任务。当第一个中断时,它不会继续到第二个。搜索失败的原因是我目前无法正确地将 Selenium 切换到必要的最终按钮所在的框架。不幸的是,代码本身并没有错误消息与大家分享。
我进行了相当广泛的搜索,但除了代码上的 continue/pass 语句之外,仍然没有发现任何相似之处,但没有帮助。
对新手有什么建议吗?
谢谢!
【问题讨论】:
-
pass或continue在那里完全没有意义,因为简单地删除它们应该会导致相同的行为,即循环继续直到迭代器耗尽。您必须提供minimal reproducible example,因为您显示的代码不会按照您描述的方式运行 -
你有一个非常通用的异常声明。根据要求,您的逻辑是正确的。要调试,您在异常块中添加打印语句并查看它是否通过所有循环。
-
您绝对确定您的代码正在跳过循环吗?您是否尝试过将打印语句放入循环中以检查它是否仍在运行(例如,如果只有一个错误)?我无法在我的机器上重现您的错误。