在程序的多个部分捕获 ValueError

Posted

技术标签:

【中文标题】在程序的多个部分捕获 ValueError【英文标题】:Catch ValueError in multiple parts of program 【发布时间】:2019-08-21 11:27:15 【问题描述】:

当变量变为负数时,我试图引发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')

谢谢

【问题讨论】:

【参考方案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 何时出现。

以上是关于在程序的多个部分捕获 ValueError的主要内容,如果未能解决你的问题,请参考以下文章

Java面向对象程序设计------异常处理(异常*部分3)

Java面向对象程序设计------异常处理(异常*部分3)

Java面向对象程序设计------异常处理(异常*部分3)

如何在目标c中删除表格视图中的多个部分?

Chapter 21_4 捕获

如何捕获在包含多个表单的页面上按下的输入键?