2013-03-07 101 views

回答

7

UUID()构造或者提出了TypeErrorValueError,具体内容取决于传入。

若没有通过任何的hexbytesbytes_lefields,或int选择提出了一个TypeError,传递一个值,该值是无效提出了一个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实例,或者引发异常。

+0

我的问题的第二部分呢?有没有“myStatus”等于False的情况? – zakdances 2013-03-07 18:04:50

+0

@yourfriendzak:不,因为你得到一个'UUID'实例,否则会引发异常。 – 2013-03-07 18:05:45

1

由于UUID class不覆盖__new__,它的构造无法返回除uuid.UUID实例以外的其他任何东西。

该模块提供的UUID工厂,功能uuid1uuid4,可以想象有一个错误,导致他们返回None。粗略浏览一下他们的implementation来看,这样的错误似乎不太可能。无论什么故障导致您的UUID对象为Noneuuid模块不是一个可信的罪魁祸首。

+0

这些便利方法绝大多数都返回'UUID'实例,或引发异常。这些人都没有机会返回“无”。 – 2013-03-07 18:09:42

+0

@MartijnPieters同意,但必须研究每个人的代码。另一方面,由于类没有定义'__new__'(或者指定一个元类),构造就变得清晰了。 – user4815162342 2013-03-07 18:12:17

+0

这就是我所做的;功能很简单。我确定。 :-) – 2013-03-07 18:12:47