将无效参数提供给uuid.UUID()会发生什么?
会抛出异常吗? UUID()是否曾默默失败?是否有任何情况,其中'myStatus'从将无效参数提供给uuid.UUID()会发生什么?
myStatus = True
myUUID = uuid.UUID(someWeirdValue)
if myUUID == None:
myStatus = False
会等于假吗?
的UUID()
构造或者提出了TypeError
或ValueError
,具体内容取决于传入。
若没有通过任何的hex
,bytes
,bytes_le
,fields
,或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
实例,或者引发异常。
由于UUID
class不覆盖__new__
,它的构造无法返回除uuid.UUID
实例以外的其他任何东西。
该模块提供的UUID工厂,功能uuid1
到uuid4
,可以想象有一个错误,导致他们返回None
。粗略浏览一下他们的implementation来看,这样的错误似乎不太可能。无论什么故障导致您的UUID对象为None
,uuid
模块不是一个可信的罪魁祸首。
这些便利方法绝大多数都返回'UUID'实例,或引发异常。这些人都没有机会返回“无”。 – 2013-03-07 18:09:42
@MartijnPieters同意,但必须研究每个人的代码。另一方面,由于类没有定义'__new__'(或者指定一个元类),构造就变得清晰了。 – user4815162342 2013-03-07 18:12:17
这就是我所做的;功能很简单。我确定。 :-) – 2013-03-07 18:12:47
我的问题的第二部分呢?有没有“myStatus”等于False的情况? – zakdances 2013-03-07 18:04:50
@yourfriendzak:不,因为你得到一个'UUID'实例,否则会引发异常。 – 2013-03-07 18:05:45