Issue 19164: Update uuid.UUID TypeError exception: integer should not be an argument. (original) (raw)

When you try to use uuid.UUID() without arguments you get a TypeError exception saying that you can actually use an integer (while you cannot).

Python 2.6.8 (default, Apr 26 2013, 16:24:53) [GCC 4.6.3] on linux2

uuid.UUID() Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.6/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(uuid.uuid4().int) Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.6/uuid.py", line 131, in init hex = hex.replace('urn:', '').replace('uuid:', '') AttributeError: 'long' object has no attribute 'replace'

So, let's check with an integer - maybe an int has 'replace'.

uuid.UUID(1231231) Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.6/uuid.py", line 131, in init hex = hex.replace('urn:', '').replace('uuid:', '') AttributeError: 'int' object has no attribute 'replace'

No, it doesn't. Anyway, with a propery hex value, it works (of course!).

uuid.UUID(uuid.uuid4().hex) UUID('89b1283d-c32e-4b8a-a9e3-a699445fdd4d')

The exception message is correct. You can give an integer argument. But you have to use keyword argument.

uuid.UUID(int=uuid.uuid4().int) UUID('62ad61e5-b492-4f01-81e6-790049051c4f')

From the documentation:

init(self, hex=None, bytes=None, bytes_le=None, fields=None, int=None, v ersion=None) | Create a UUID from either a string of 32 hexadecimal digits, | a string of 16 bytes as the 'bytes' argument, a string of 16 bytes | in little-endian order as the 'bytes_le' argument, a tuple of six | integers (32-bit time_low, 16-bit time_mid, 16-bit time_hi_version, | 8-bit clock_seq_hi_variant, 8-bit clock_seq_low, 48-bit node) as | the 'fields' argument, or a single 128-bit integer as the 'int' | argument. When a string of hex digits is given, curly braces, | hyphens, and a URN prefix are all optional. For example, these | expressions all yield the same UUID:

Yeah, the first message should probably say "one of the hex, bytes, bytes_le, fields, or int arguments must be given"