【问题标题】:Catch ValueError in multiple parts of program在程序的多个部分捕获 ValueError
【发布时间】:2023-04-02 10:00:01
【问题描述】:

当变量变为负数时,我试图引发ValueError。我的问题是这个变量在我的程序的几个部分改变了值。我怎样才能只用一个raise 语句达到与下面相同的结果?

import random

a = 5

while True:

    a -= random.randint(0,10)
    if a < 0:
        raise ValueError('Cannot be negative')

    a += random.randint(0,10)
    if a < 0:
        raise ValueError('Cannot be negative')

    a -= random.randint(0,10)
    if a < 0:
        raise ValueError('Cannot be negative')

    a += random.randint(0,10)
    if a < 0:
        raise ValueError('Cannot be negative')

谢谢

【问题讨论】:

    标签: python error-handling python-3.5 valueerror


    【解决方案1】:

    我建议为您的变量使用 getter/setter,然后签入 setter。这正是它们存在的原因

    【讨论】:

    • 正是我需要的!
    【解决方案2】:

    由于必须在错误变为负数时才提出错误,因此每次减少变量时都必须检查 ValueError。您不需要在添加后检查 ValueError,因为如果它不是负数,则添加后也不会是负数。如果你想在你的代码中只放一次raise ValueError('Cannot be negative'),那么这是一种方法:

    import random
    
    a = 5
    
    while True:
    
        a -= random.randint(0,10)
        if a < 0:
            raise ValueError('Cannot be negative')
        a += random.randint(0,10)
    

    【讨论】:

    • 谢谢你,不幸的是,这只是一个简单的例子来说明我的变量是如何在我的代码中多次更改的。我可以使用with raisewhile 之类的东西吗?
    • 您能否说明您希望从该计划中获得什么?我似乎不明白您想使用什么以及您希望ValueError 何时出现。
    最近更新 更多