【问题标题】:Writing in acceptable values into if statement [closed]将可接受的值写入 if 语句 [关闭]
【发布时间】:2012-09-29 04:45:48
【问题描述】:

我在让它工作时遇到了一点麻烦,试图评估两个值并导致违反规则,但接受 N/A 作为值相等之外的唯一可接受值。

这是我目前所拥有的。

x = value1
y = value2  

if x == "N/A" or x == y: 
    Rule.Violated = False
else:
    Rule.Violated = True

Rule.Violated 是系统中的一个内置函数,我用来返回一条错误消息,如果违反规则为假,则不返回一条,我认为 if 语句的结果对弄清楚虽然逻辑,但如果您需要更多信息,请告诉我。

【问题讨论】:

  • 那么到底是什么失败了?它接受的值比它应该接受的多,值更少?
  • 您应该使用raise 来引发错误/异常,而不是将某些全局变量设置为True...此外,如果Rule.Violated 是一个函数,您不应该调用它(而不是覆盖它的值)?
  • 对不起,我用错了词,不是函数。老实说,我什至无法告诉你 rule.violated 到底是什么,我只知道它在违反时会在我们的系统中引发错误。对不起,希望我有更多的信息。它失败了,因为它不会接受 N/A 作为使规则不违反的有效值。
  • 反对票是怎么回事?解释

标签: python if-statement boolean logic


【解决方案1】:

我可能会这样做:

if x not in ('N/A', y,):
    raise ValueError('my message')

使用异常处理是推荐的 Pythonic 处理输入验证的方式。

(另外,建议使用内置的异常类型,因为如果提供的异常类型覆盖了整个标准库,您将不需要创建新的)

【讨论】:

  • 这个帮助,我在你写的时候试过了,但是我的系统抛出错误,我必须坚持使用 rule.violated。但谢谢你的帮助。不幸的是,这也不起作用。我尝试将您的行 raise ValueError('my message') 替换为 rule.violated = true else: rule.violated = false
【解决方案2】:

这是你想要的吗?

Rule.Violated = (x != y and x != "N/A")

【讨论】:

  • 这不只是对 OP 当前(失败)代码的重新排列吗? (如果 OP 的代码失败,为什么这会起作用?)
  • 不,这没用,不过谢谢
【解决方案3】:

我明白了,感谢那些帮助过的人。我的问题是数据类型,下次我有问题时一定要提到数据类型,但是对于那些好奇的人,这里是答案。

必须使用开发人员告诉我的函数将字段作为字符串获取并比较字符串。以前试图将日期时间与字符串进行比较,我的愚蠢举动。 FormSet 也是我们系统中的一个内置参考,我试图避免使用除直接 python 之外的任何东西来提问。

x = FormSet.GetFieldString(CurrentForm, “SUM_VALUE_DATE”)
y = FormSet.GetFieldString(CurrentForm, “ORG_APPRAISAL_DATE”)

if x == “N/A” or FormSet.GetDaySpan(x, y) == 0:
            Rule.Violated = False
else:
            Rule.Violated = True

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 2020-08-03
    • 1970-01-01
    • 2022-07-20
    • 2021-08-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多