2013-03-07 59 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