【问题标题】:Python3 - IndexError not caught when using exceptPython3 - 使用 except 时未捕获 IndexError
【发布时间】:2021-01-23 06:17:26
【问题描述】:

我想捕捉 Python3 中的任何类型的错误。

我正在尝试这样的事情:

try:
   fields = line.split(' ')
   ...
   <PostgreSQL query execution>

except psycopg2.Error:
                    conn.rollback()
                    QUERY = "UPDATE table SET error='sql'"
                    cur = conn.cursor()
                    cur.execute(QUERY)
                    conn.commit()
                    cur.close()
                    continue
except:
                    conn.rollback()
                    e="generic"
                    QUERY = "UPDATE table SET error='generic'"
                    cur = conn.cursor()
                    cur.execute(QUERY)
                    conn.commit()
                    cur.close()
                    continue
                    

但我注意到,例如,未捕获 IndexError 并且脚本失败。

怎么了?

谢谢!

【问题讨论】:

标签: python-3.x exception try-catch


【解决方案1】:

当在 except 块中发生新异常时会发生这种情况。

例如:

try:
    print('foo')
    raise ValueError
except:
    print('noes!')
    print(1/0)

将退出除以零异常。

为了确定是否如此,我们需要您提供更多实际代码,尤其是两个 except 块。

如果您想确保捕获“任何”异常,请确保您的 except 块没有异常。

【讨论】:

  • 实际上脚本因“IndexError”异常而失败。我刚刚编辑了添加两个 except 块的问题。
  • 如你所说,sql语句有错误。
  • @Fab 很高兴我能帮上忙。请注意,捕获 SQL 错误并在 except 块中尝试更多 SQL 根据定义容易出错(即使查询中没有错误)。如果最初的异常发生是因为您失去了与服务器的连接怎么办? except 块中的经验法则是尽可能少地使用依赖于外部环境的代码。或者一些优雅地失败的东西,比如系统日志消息。
猜你喜欢
  • 2020-05-09
  • 2022-11-27
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多