如果还不是 UUID,如何将变量转换为 UUID(否则为 no-op)

How to convert a variable to UUID if not yet a UUID (otherwise, no-op)

提问人:Greg St. Onge 提问时间:10/24/2023 最后编辑:wjandreaGreg St. Onge 更新时间:10/24/2023 访问量:39

问:

我正在尝试将我知道是 UUID 的变量与可能是 str 或可能已经是 UUID 的变量进行比较 - 如果类型不确定的变量是 str,则比较无法正常工作。我想强制变量为 UUID,而不会使用实例获得所有冗长的内容

因此,如果在运行时是 str,此代码总是会抛出异常 - 有没有办法强制 UUID 的类型?uuid_as_an_str_or_uuiduuid_as_an_str_or_uuid

if for_sure_a_uuid != uuid_as_an_str_or_uuid:
    raise Exception("not the right UUID")

我试过这个,但如果已经是 - 构造函数在试图将其视为 str 时抛出错误uuid_as_an_str_or_uuidUUID

if for_sure_a_uuid != uuid.UUID(uuid_as_an_str_or_uuid):
    raise Exception("not the right UUID")
Python 铸造

评论

2赞 John Gordon 10/24/2023
你为什么反对打电话一次?这似乎是正确的解决方案。isinstance()
0赞 wjandrea 10/24/2023
“实例”?你的意思是,对吧?isinstance()
0赞 deceze 10/24/2023
定义你自己的小函数来执行检查并保证返回一个 ...‽isinstanceUUIDif ensure_uuid(uuid_as_an_str_or_uuid) …
0赞 Greg St. Onge 10/24/2023
所以你们都说没有内置的方法来确保变量是 UUID - 它是你自己的?另外,相等/不等式运算符默默地比较 python 中的不同类型并在它们这样做时采取同义行动是怎么回事?无法将作为 str 的 UUID 与作为 UUID 的 UUID 进行比较似乎违背了“任何行为为鸭子的对象都应该被视为鸭子”的理念
0赞 deceze 10/24/2023
这并不是鸭子打字的真正意义所在。可以说,字符串不等于 UUID 的实例,即使它们的值表示相同的内容。Python 值是显式的,而不是隐式的魔法;认为它们相等会带来一些隐含的转换,这与这个想法背道而驰。但反过来考虑:将 a 投射到字符串上,并且将是字符串上的一个 noop;这就是你想要的吗......?strUUID

答: 暂无答案