【问题标题】:assert variable that can have different datatypes断言可以具有不同数据类型的变量
【发布时间】:2022-01-22 04:53:10
【问题描述】:

我的x 变量可以是字符串或整数。这行代码满足我的需要

assert x == 'dummy_string' or x == 0

我担心的是我将x 变量与不同的数据类型进行比较。会不会因此而出现一些意想不到的问题?总是将x 转换为字符串并执行此操作不是更好吗

assert x == 'dummy_string' or x == '0'

有什么推荐的方法吗?

【问题讨论】:

  • 断言采用布尔值;你不是在传递一个字符串或一个整数,你传递的是“真”或“假”
  • 由于 Python 3 没有/使用有问题的强制规则,assert x == 'dummy_string' or x == 0 非常好。

标签: python string assert


【解决方案1】:

如果x 始终为strint,那么您的第一个示例应该可以在没有TypeErrors 或“Javascriptish”结果(如'0' == 0)的情况下正常工作。顺便说一句,与多个值的比较也可以这样写:

assert x in ('dummy_string', 0)

否则,如果你害怕x 有某种类型可能会从__eq__() 提升TypeError,你可以采取额外的防御措施:

assert (isinstance(x, str) and x == 'dummy_string') \
       or (isinstance(x, int) and x == 0)

我不建议检查str(x) == '0'(您的第二个示例),因为谁知道,理论上不仅int(0) 可以字符串化为'0',而且任何定义的类:

def __str__(self):
    return '0'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 2011-04-03
    • 2021-07-12
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多