【问题标题】:How continue execute program after assertion in python?在python中断言后如何继续执行程序?
【发布时间】:2016-10-29 22:59:25
【问题描述】:

我正在学习python中的异常,我有一些疑问:

我们可以在 raise 中使用任何名称作为错误吗?

就像我在使用 raise 时所读到的那样,您必须定义错误类型,所以我不能使用任何字符串名称作为错误吗?比如SkienaError 或者我必须记住所有的错误类型并且必须只使用那些错误类型名称?

    a=int(input())
if a!=10:
    raise SkienaError
else:
    print(a,"pp")

第二个疑问是假设我希望用户应该输入 int 但他输入字符串所以一个断言弹出但我希望程序应该继续而不终止并再次要求输入直到用户给出 int 类型输入,我不想使用 while在这里循环我想知道是否可以在 python 中使用 raise 或 assert ?喜欢:

a=int(input())
assert type(a)==int
print(a,"hello")

所以如果用户给出 str 类型的输入,那么程序是否有可能不断给出错误并询问新的输入,直到输入类型为 int。

【问题讨论】:

    标签: python python-2.7 python-3.x


    【解决方案1】:

    为了创建自己的异常,您必须创建它。

    例如

    class MyAppLookupError(LookupError):
    '''raise this when there's a lookup error for my app'''
    

    要在抛出异常后继续执行,请执行以下操作:

    a = 5
    try:
        assert a == 5
    except AssertionError as e:
        print(e)
    

    try 块将尝试执行代码块。如果发生异常,它将执行except 块。

    【讨论】:

    • 我尝试了你所说的,但未能检查出我想要做什么:paste.ofcode.org/brZxC42zRerVbmwSRpkrv4
    • except error 是语法错误。你想要except AssertionError
    • 我无法定义任何名称?我必须特别使用“AssertionError”作为关键字??
    • assert 是一个特殊的关键字,它产生一个子类型为AssertionErrorException。你可以写except Exceptionexcept AssertionError。如果你想自己做,你必须为它写一个Exception 类。
    • 确定我再次尝试了你所说的,但如果我提供 str 类型输入,它不会再次要求 int :paste.ofcode.org/6SD7uwX6FNrvgppHxF5vEW
    【解决方案2】:

    这也可能适用于您的情况。如果布尔输入 bCondFalse 并且解释器继续执行,则函数 Assert() 以红色打印消息 sTxt

    RED, END = '\033[91m', '\033[0m'
    printRed = lambda sTxt: print(RED + sTxt + END)
    Assert = lambda bCond=False, sTxt='': printRed(sTxt) if not bCond else None
    

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 2022-08-02
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2019-08-05
      相关资源
      最近更新 更多