Python 将无效参数馈送到uuid.uuid()时会发生什么情况?

Python 将无效参数馈送到uuid.uuid()时会发生什么情况?,python,exception,uuid,Python,Exception,Uuid,是否会抛出异常?UUID()是否曾经以静默方式失败?“myStatus”在什么情况下从 myStatus = True myUUID = uuid.UUID( someWeirdValue ) if myUUID == None: myStatus = False 是否等于False?构造函数根据传入的内容引发TypeError或ValueError 不传入任何十六进制、字节、字节、字段、或int选项都会引发类型错误,传入无效值会引发值错误: >>> uuid.UUI

是否会抛出异常?UUID()是否曾经以静默方式失败?“myStatus”在什么情况下从

myStatus = True
myUUID = uuid.UUID( someWeirdValue )
if myUUID == None:
    myStatus = False
是否等于False?

构造函数根据传入的内容引发
TypeError
ValueError

不传入任何
十六进制
字节
字节
字段
、或
int
选项都会引发
类型错误
,传入无效值会引发
值错误

>>> 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
>>uuid.uuid()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/uuid.py”,第129行,在__
raise TypeError('需要十六进制、字节、字节、字段或整数中的一个')
TypeError:需要十六进制、字节、字节、字段或整数中的一个
>>>uuid.uuid('abcd')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/uuid.py”,第134行,在__
raise VALUERROR('格式错误的十六进制UUID字符串')
ValueError:格式错误的十六进制UUID字符串
>>>uuid.uuid(bytes='abcd')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/uuid.py”,第144行,在__
raise VALUERROR('字节不是16字符字符串')
ValueError:字节不是16个字符的字符串
等等

它不会默默地失败。它肯定不会返回
None
。将
myUUID
设置为
UUID
实例,或者引发异常。

由于不重写
\uuuuu new\uuuu
,因此其构造只能返回
UUID.UUID
实例


模块提供的UUID工厂(函数
uuid1
uuid4
)可能存在导致它们返回
None
的错误。粗略地看一眼他们的电脑,这样的错误似乎不太可能出现。无论是什么故障导致您的UUID对象为
None
UUID
模块都不是可靠的罪魁祸首。

我问题的第二部分呢?有没有任何情况下“myStatus”等于False?@yourfriendzak:没有,因为你要么得到一个
UUID
实例,要么它引发一个异常。方便的方法肯定都会返回
UUID
实例,或者引发一个异常。他们中的任何人都不可能返回
None
@MartijnPieters同意,但必须研究他们每个人的代码才能确定。另一方面,由于类没有定义
\uuuuu new\uuuuuu
(或指定元类),构造是明确的;这些函数非常简单。我敢肯定。:-)@MartijnPieters我明确回答的要点是向OP展示,他不需要尝试传递不同的奇怪值,以确保他没有得到
None
——他可以从构造函数的外观知道这一点。在这种情况下可能不会有很大的不同,但我认为值得指出。是的,理解这一部分,只是增加了一个保证,即便利函数也不会返回
None
。永远都不会。这种事情可以很容易地由自己检查,伙计。只需转到python解释器并执行此代码段,不要这样问。