tzh
2024-08-22 c7d0944258c7d0943aa7b2211498fd612971ce27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
R\¬Qc@s?dZied6Zed„Zedkr;edeƒndS(sù
 
Unpack tuple
 
    >>> t = (1, 2, 3)
    >>> a, b, c = t
    >>> a == 1 and b == 2 and c == 3
    True
 
Unpack list
 
    >>> l = [4, 5, 6]
    >>> a, b, c = l
    >>> a == 4 and b == 5 and c == 6
    True
 
Unpack implied tuple
 
    >>> a, b, c = 7, 8, 9
    >>> a == 7 and b == 8 and c == 9
    True
 
Unpack string... fun!
 
    >>> a, b, c = 'one'
    >>> a == 'o' and b == 'n' and c == 'e'
    True
 
Unpack generic sequence
 
    >>> class Seq:
    ...     def __getitem__(self, i):
    ...         if i >= 0 and i < 3: return i
    ...         raise IndexError
    ...
    >>> a, b, c = Seq()
    >>> a == 0 and b == 1 and c == 2
    True
 
Single element unpacking, with extra syntax
 
    >>> st = (99,)
    >>> sl = [100]
    >>> a, = st
    >>> a
    99
    >>> b, = sl
    >>> b
    100
 
Now for some failures
 
Unpacking non-sequence
 
    >>> a, b, c = 7
    Traceback (most recent call last):
      ...
    TypeError: 'int' object is not iterable
 
Unpacking tuple of wrong size
 
    >>> a, b = t
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack
 
Unpacking tuple of wrong size
 
    >>> a, b = l
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack
 
Unpacking sequence too short
 
    >>> a, b, c, d = Seq()
    Traceback (most recent call last):
      ...
    ValueError: need more than 3 values to unpack
 
Unpacking sequence too long
 
    >>> a, b = Seq()
    Traceback (most recent call last):
      ...
    ValueError: too many values to unpack
 
Unpacking a sequence where the test for too long raises a different kind of
error
 
    >>> class BozoError(Exception):
    ...     pass
    ...
    >>> class BadSeq:
    ...     def __getitem__(self, i):
    ...         if i >= 0 and i < 3:
    ...             return i
    ...         elif i == 3:
    ...             raise BozoError
    ...         else:
    ...             raise IndexError
    ...
 
Trigger code while not expecting an IndexError (unpack sequence too long, wrong
error)
 
    >>> a, b, c, d, e = BadSeq()
    Traceback (most recent call last):
      ...
    BozoError
 
Trigger code while expecting an IndexError (unpack sequence too short, wrong
error)
 
    >>> a, b, c = BadSeq()
    Traceback (most recent call last):
      ...
    BozoError
 
tdoctestscCs4ddlm}ddlm}|j||ƒdS(Niÿÿÿÿ(t test_support(t test_unpack(ttestRRt run_doctest(tverboseRR((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/test/test_unpack.pyt    test_main|st__main__RN(Rt__test__tFalseRt__name__tTrue(((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/test/test_unpack.pyt<module>xs