如何区分同一个try语句中出现的不同异常

 黑鸽子 发布于 2023-02-13 09:21

例如:

try:
    myfruits = FruitFunction()    #Raises some exception (unknown)
    assert "orange" in myfruits   #Raises AssertionError (known)

except:
    # I don't know how to distinguish these two errors :(

我需要从所有其他未知的异常中过滤出一种特殊的异常(已知).我还需要断言来继续相同的异常处理,

try:
    myfruits = FruitFunction()    #Raises some exception (unknown)
    assert "orange" in myfruits   #Raises AssertionError (known)

except AssertionError:
    # Handle Assertion Errors here
    # But I want the except below to happen too!

except:
    # Handle everything here

我将添加一个真实的例子来更简洁地传达这个想法:

try:
    # This causes all sorts of errors
    myurl = urllib.urlopen(parametes)

    # But if everything went well
    assert myurl.status == 202

    # proceed normal stuff

except:
    # print "An error occured" if any error occured
    # but if it was an assertion error,
    # add "it was something serious too!"

Steve Jessop.. 5

try:
    try:
        myfruits = FruitFunction()    #Raises some exception (unknown)
        assert "orange" in myfruits   #Raises AssertionError (known)
    except AssertionError:
        # handle assertion
        raise
except Exception:
    # handle everything

我假设你不能分开抛出不同异常的两个语句(例如,因为它们在另一个函数中一起关闭).如果可以,则以下内容更加准确和直接:

try:
    myfruits = FruitFunction()    #Raises some exception (unknown)
    try:
        assert "orange" in myfruits   #Raises AssertionError (known)
    except AssertionError:
        # handle assertion
        raise
except Exception:
    # handle everything

它更精确,因为如果发生的未知异常FruitFunction()恰好是AssertionError那么它就不会陷入内心try.在不分离语句的情况下,没有(合理的)方法来区分从两个不同位置抛出的两个相同类型的异常.因此,对于第一个代码,您最好FruitFunction()不要提升AssertionError,或者如果确实如此,那么它可以像处理另一个代码一样处理.

1 个回答
  • try:
        try:
            myfruits = FruitFunction()    #Raises some exception (unknown)
            assert "orange" in myfruits   #Raises AssertionError (known)
        except AssertionError:
            # handle assertion
            raise
    except Exception:
        # handle everything
    

    我假设你不能分开抛出不同异常的两个语句(例如,因为它们在另一个函数中一起关闭).如果可以,则以下内容更加准确和直接:

    try:
        myfruits = FruitFunction()    #Raises some exception (unknown)
        try:
            assert "orange" in myfruits   #Raises AssertionError (known)
        except AssertionError:
            # handle assertion
            raise
    except Exception:
        # handle everything
    

    它更精确,因为如果发生的未知异常FruitFunction()恰好是AssertionError那么它就不会陷入内心try.在不分离语句的情况下,没有(合理的)方法来区分从两个不同位置抛出的两个相同类型的异常.因此,对于第一个代码,您最好FruitFunction()不要提升AssertionError,或者如果确实如此,那么它可以像处理另一个代码一样处理.

    2023-02-13 09:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有