2

会抛出异常吗?UUID() 是否会默默地失败?是否有任何情况下'myStatus'来自

myStatus = True
myUUID = uuid.UUID( someWeirdValue )
if myUUID == None:
    myStatus = False

等于假?

4

2 回答 2

9

根据传入的内容,UUID()构造函数会引发 aTypeError或 a 。ValueError

不传入任何hex, bytes, bytes_le, fields, 或int选项会引发 a TypeError,传入无效的值会引发 a ValueError

>>> uuid.UUID()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/uuid.py", line 129, in __init__
    raise TypeError('need one of hex, bytes, bytes_le, fields, or int')
TypeError: need one of hex, bytes, bytes_le, fields, or int
>>> uuid.UUID('abcd')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/uuid.py", line 134, in __init__
    raise ValueError('badly formed hexadecimal UUID string')
ValueError: badly formed hexadecimal UUID string
>>> uuid.UUID(bytes='abcd')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/uuid.py", line 144, in __init__
    raise ValueError('bytes is not a 16-char string')
ValueError: bytes is not a 16-char string

等等

不会默默地失败。它肯定永远不会回来None。要么myUUID设置为UUID实例,要么引发异常。

于 2013-03-07T18:03:37.243 回答
1

由于UUID该类没有 override __new__,因此它的构造无法返回除uuid.UUID实例之外的任何内容。

模块提供的 UUID 工厂,通过 的函数uuid1uuid4可以想象有一个错误导致它们返回None。粗略地看一下他们的实现,这样的错误不太可能出现。无论是什么错误导致您的 UUID 对象成为None,该uuid模块都不是一个可靠的罪魁祸首。

于 2013-03-07T18:07:40.650 回答