重新引起混乱

时间:2016-12-06 09:35:39

标签: python exception raise

如果我调用可能引发ValueError或AttributeError的函数(例如foo()),最好的方法是什么?在ValueError的情况下,我想提供另一种方式(例如调用bar()),但是在AttributeError的情况下我想重新提出异常?

  1. 显式重新引发特定的(此处为AttributeError)异常?

     
     try:
         foo() # may raise ValueError or AttributeError
     except ValueError:
         bar()
     except AttributeError:
         raise
    
  2. 或者什么也不做(隐含地重新加注)?

     
     try:
         foo() # may raise ValueError or AttributeError
     except ValueError:
         bar()
    
  3. 更新1:

    在编写库时最好的方法是什么(至少一个模块我知道它会被不同的用户使用)?明确地重新提出并记录重新引发或仅记录函数的函数(写出它可能隐含地引发特定异常)?

1 个答案:

答案 0 :(得分:0)

你可以在没有重新提升的情况下除了例外。在您的情况下,这不是必要的:

 try:
     foo() # may raise ValueError or AttributeError
 except ValueError:
     bar()

如果你需要做一些清理或者需要在提升之前调用一个函数,那么再次提升会很有用:

 try:
     foo() # may raise ValueError or AttributeError
 except ValueError:
     bar()

     raise