繁体   English   中英

如何使用单个 Try-Except 块解决多个错误消息?

[英]How do I account for multiple error messages with a single Try-Except block?

我正在编写一个脚本来从 Google 表格中读取数据并使用其他库处理它们。 完整的数据集包含可能产生相同的 2 个独特错误场景的各种输入值。 如果我执行一般的 Try-Except 块,我可以处理任何错误情况,但无论错误如何,我都只能将相同的错误消息打印到控制台。

try:
   # Run some code
except:
   print("General Error Message")
   pass

如果弹出 IndexError 消息,我还想 output 向控制台发送一条消息。 我将如何使用单个 Try-Except 块来处理两个不同的错误消息? 我试图避免使用第二个 except 块。

gspread库中的get() function 将列范围作为二维数组输入。 当我们遍历数组时(见下文),我们到达中间的[] ,我们得到错误消息: IndexError: list index out of range

在此处输入图像描述

输入数组 ( allVal ): [['apples'], ['banana'], [], ['grapes'], ['oranges]]

如果范围内有空白单元格,这就是gspread读取 Google 表格中的列的方式。 中间的[]代表范围内的空白单元格。 这是故意的,可能还有其他情况,工作表中有多个空白行来分隔不同的数据。

一切都可以处理得很好,直到我们到达allVal[2][0] ,它返回错误消息IndexError: list index out of range无论我尝试将它存储到变量中还是直接打印它。 由于代码将[]视为超出范围的内容,因此我无法将其放入任何条件语句中。 我想做这样的事情。

for i in range(len(allVal)):
   try:
      val = allVal[i][0]
      parsedJSON = someLibrary(val)
   except:
      checkStr = isinstance(val, str)
      if checkStr is False:
          print("Skipping over blank cell")
      else:
          print("Invalid input value: ", val)

因此,如果变量不是字符串,我们会说它是一个空白单元格并打印“跳过空白单元格”。 否则,我们将打印它无效并提供受影响的字符串。 但是由于我们无法对[]进行检查,所以我们可能没有答案。

我以正确的方式接近这个吗? 如何在单个 Try-Except 块中处理两个不同的错误消息?

您可以使用以下方法检查多个错误:

try:
    ...
except (NameError, TypeError) as error:
    print(error)

因此,如果它是NameError ,它将打印有关该错误的错误, TypeError也是如此。

不幸的是,除此之外,使用多个except是您的最佳选择。

根据我从您的问题中了解到的情况,您正在寻找的是一种使用单个tryexcept块来捕获不同异常的方法,而无需太多条件并到处检查。

使用此语法,您可以为每种异常类型提供except的代码块,这应该有助于您为每个异常提供不同的错误消息。

try:
  val = allVal[i][0]
  parsedJSON = someLibrary(val)
except IndexError:
  print("skip empty cell")
except NameError:
  print("something else")

您可能能够在最后一次出现时提交异常类型except ,但我不完全确定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM