【问题标题】:Conditional except statements in PythonPython中的条件except语句
【发布时间】:2018-02-08 16:00:46
【问题描述】:

有没有办法让 except 语句有条件 - 换句话说,只有在条件为真时才捕获一种异常?这是我的想法,但似乎行不通

try:
  <code>
if condition == True:
  except Exception as e:
    <error handling>

【问题讨论】:

标签: python exception


【解决方案1】:

不,你不能那样做。您可以做的是捕获错误,然后检查 except 块内的条件并在必要时重新引发:

except Exception as e:
    if not condition:
        raise

【讨论】:

  • 你不需要e之后的raise
  • 我实际上忽略了这个 - 问题是我捕获的异常可能没有被导入。那么有没有办法只捕获该类型存在的异常类型?
  • 如果你有一个异常对象,根据定义,它的类型确实存在。它尚未在您当前的模块中导入的事实是另一个问题,并且很容易解决:只需导入它。如果您的问题是“我如何只捕获特定类型的异常”,那么它会记录在案:docs.python.org/3/tutorial/errors.html#handling-exceptions
【解决方案2】:

不是这样,但我发现这是最干净的解决方案

try:
  <code>
except Exception as e:
    if condition:
        <error handling>
    else:
        raise  # re raises the exception

【讨论】:

    【解决方案3】:

    您可以为每种情况使用不同的异常并分别捕获它们:

    import random
    
    
    class myException_1(Exception):
    
        pass
    
    class myException_2(Exception):
        pass
    
    
    try:
        a = random.randint(0,10)
        if a % 2 == 0:
            raise myException_1("something happened")
        elif a % 3 ==0:
            raise myException_2("something else happened")
        else:
            print("we made it!")
    except myException_2 as e:
        print("a was divisible by 3")
        print(e)
    except myException_1 as e:
        print("a was divisible by 2")
        print(e)
    

    【讨论】:

    • 我不确定有条件的 throwing 与问题有什么关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2013-04-10
    • 2012-12-04
    • 2022-01-12
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多