如何处理多个异常?

2024-09-30 01:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个Python学习者,尝试处理一些场景:

  1. 正在读取文件。在
  2. 格式化数据。在
  3. 操作/复制数据。在
  4. 正在写入文件。在

到目前为止,我已经:

try:
   # Do all
except Exception as err1:
   print err1
   #File Reading error/ File Not Present

except Exception as err2:
   print err2
   # Data Format is incorrect
except Exception as err3:
   print err3
   # Copying Issue
except Exception as err4:
   print err4
   # Permission denied for writing

以这种方式实现的想法是捕捉所有不同场景的精确错误。我可以在所有单独的try/except块中完成。在

这可能吗?合理吗?在


Tags: 文件数据as场景exception学习者dofile
3条回答

正如DeepSpace所说

Your try blocks should be as minimal as possible.

如果你想实现

try:
     # do all
except Exception:
     pass

那你最好做点什么

^{pr2}$

是的,这是可能的。在

举个例子:

try:
    ...
except RuntimeError:
    print err1
except NameError:
    print err2

...

只需定义要截获的确切错误。在

  1. 您的try块应该尽可能少,因此

    try:
         # do all
    except Exception:
         pass
    

    不是你想做的事。

  2. 示例中的代码不会如您所期望的那样工作,因为在每个except块中,您捕获的是最常见的异常类型Exception。实际上,只执行第一个except块。

您要做的是拥有多个try/except块,每个块负责尽可能少的事情,并捕捉最具体的异常。在

例如:

^{pr2}$

但是,有时在同一个except块或多个块中捕捉不同类型的异常是合适的。在

try:
    ssh.connect()
except (ConnectionRefused, TimeoutError):
    pass

或者

try:
    ssh.connect()
except ConnectionRefused:
    pass
except TimeoutError:
    pass

相关问题 更多 >

    热门问题