【问题标题】:Handling errors while working with code snippets处理代码片段时的错误
【发布时间】:2014-11-19 22:31:24
【问题描述】:

我在 python 中一次运行一堆代码,方法是从我的编辑器中复制代码并将其粘贴到 python 中。此代码包括嵌套的 for 循环。我正在做一些网络抓取,程序在不同的时间退出。我怀疑这是因为它没有时间加载。我收到以下错误(再一次 - 程序每次都会抓取不同数量的文本):

Traceback (most recent call last):
  File "<stdin>", line 35, in <module>
IndexError: list index out of range

首先,line 35 指的是什么?这是相关内部 for 循环中的位置吗?

其次,我认为错误可能是由使用 selenium 的一行代码引起的,如下所示:

driver.find_elements_by_class_name("button")[j-1].click()

在这种情况下,如何处理这个错误?有哪些带有显式等待或异常处理的示例代码可以解决该问题?

【问题讨论】:

  • 通常,除了非常小的 sn-ps 之外,您会将 Python 脚本保存到文件中,然后通过python 命令行命令运行它。这将比粘贴到 Python REPL 中更具可持续性。在您当前的情况下,好处是 Python 报告的行号将引用您文件中的实际行号。
  • 在 Python REPL 中使用 python 方法与 execfile(filename) 相比有什么优势吗?
  • 我想你可以使用execfile(),这同样可以。
  • 这是粘贴的第 35 行。如果一个定义的函数稍后在发布的文件中调用另一个,则粘贴脚本可能会失败。但是您会收到有关未定义名称的错误。为什么不直接将脚本写入文件并对其进行测试?

标签: python exception python-interactive


【解决方案1】:

这意味着对于给定的j 值,[j-1] 不存在,可能是如果j-1 超过列表中的最大元素数

【讨论】:

  • 不确定谁投了反对票,但这是对错误的一个很好的解释。
【解决方案2】:

您可以尝试您的代码并像这样捕获 IndexError 异常:

try:
    # your code here
except IndexError:
    # handle the error here

当您尝试访问不存在的列表的索引时会发生 IndexError。例如:

>>> a = [1, 2, 3]
>>> print(a[10])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

如果没有更多细节,很难说应该如何处理错误。

【讨论】:

    【解决方案3】:

    使用代码 sn-ps 时,可以方便地在文本编辑器中打开它们,或者

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多