2

例外がスローされますか?UUID()が黙って失敗することはありますか?'myStatus'からの状況はありますか

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

Falseに等しいでしょうか?

4

2 に答える 2

9

UUID()コンストラクターは、渡された内容に応じて、またはをTypeError発生させます。ValueError

、、、、、またはオプションのいずれも渡さない場合は、hexが発生しbytes、無効な値を渡さない場合は:が発生します。bytes_lefieldsintTypeErrorValueError

>>> 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

黙って失敗することはありません。それは確かに二度と戻らないでしょうNonemyUUIDインスタンスに設定されているかUUID、例外が発生します。

于 2013-03-07T18:03:37.243 に答える
1

UUIDクラスはオーバーライドしないため、その構造がインスタンス__new__以外のものを返すことはできません。uuid.UUID

モジュールによって提供されるUUIDファクトリ、からの関数uuid1にはuuid4、おそらく、それらがを返す原因となるバグがある可能性がありますNoneそれらの実装をざっと見て判断すると、そのようなバグはありそうにないようです。UUIDオブジェクトの原因となっている障害が何であれNoneuuidモジュールは信頼できる原因ではありません。

于 2013-03-07T18:07:40.650 に答える