mirror of
https://github.com/python/cpython.git
synced 2024-11-25 19:03:49 +08:00
33d2689fc9
svn+ssh://pythondev@svn.python.org/python/branches/p3yk ........ r56497 | kurt.kaiser | 2007-07-22 14:55:16 -0700 (Sun, 22 Jul 2007) | 4 lines In the case of syntax errors, in py3k format_exception_only() was including line number and position in the final line of the exception notification, duplicating info in previous lines. ........ r56501 | kurt.kaiser | 2007-07-22 19:35:50 -0700 (Sun, 22 Jul 2007) | 2 lines Hum, needed a newline in the last change. ........ r56536 | kurt.kaiser | 2007-07-24 19:06:48 -0700 (Tue, 24 Jul 2007) | 5 lines Not all instantiations of SyntaxError set the args attribute. e.g. symtable.c Modify format_exception_only() to get SyntaxError attributes directly instead of unpacking 'args'. ........ r56537 | kurt.kaiser | 2007-07-24 19:13:03 -0700 (Tue, 24 Jul 2007) | 3 lines Update doctest strings: traceback.py no longer prints redundant location information in the last line of the exception display. ........ r56627 | kurt.kaiser | 2007-07-29 21:06:57 -0700 (Sun, 29 Jul 2007) | 2 lines Interactive interpreter emulator (code.py) failing to print exceptions. ........ r56628 | kurt.kaiser | 2007-07-29 21:41:02 -0700 (Sun, 29 Jul 2007) | 2 lines Eliminate extra lines before and after tracebacks. ........ r56638 | kurt.kaiser | 2007-07-31 19:36:45 -0700 (Tue, 31 Jul 2007) | 3 lines Refactor syntax error display in shell and edit windows; move colorize_syntax_error() to EditorWindow; update to py3k. ........ r56685 | neal.norwitz | 2007-08-02 22:20:23 -0700 (Thu, 02 Aug 2007) | 10 lines Remove several h/w and o/s specific modules that are undocumented, obsolete, and/or not widely used: linuxaudiodev.c, sunaudiodev.c Lib/plat-sunos5/SUNAUDIODEV.py Lib/audiodev.py Tools/audiopy/audiopy Move Lib/toaiff.py to Demo. See PEP 3108 for most of the details. ........ r56686 | neal.norwitz | 2007-08-02 22:21:48 -0700 (Thu, 02 Aug 2007) | 4 lines Missed one module that should have been removed since it relied on audiodev which was removed. ........ r56748 | neal.norwitz | 2007-08-04 19:19:04 -0700 (Sat, 04 Aug 2007) | 1 line Make from X import * outside module scope an error. ........ r56750 | neal.norwitz | 2007-08-04 19:35:01 -0700 (Sat, 04 Aug 2007) | 1 line Use READONLY consistently instead of RO ........
158 lines
3.4 KiB
Python
158 lines
3.4 KiB
Python
# Tests for extended unpacking, starred expressions.
|
|
|
|
doctests = """
|
|
|
|
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 = l
|
|
>>> a == 4 and b == [5, 6]
|
|
True
|
|
|
|
Unpack implied tuple
|
|
|
|
>>> *a, = 7, 8, 9
|
|
>>> a == [7, 8, 9]
|
|
True
|
|
|
|
Unpack string... fun!
|
|
|
|
>>> a, *b = 'one'
|
|
>>> a == 'o' and b == ['n', 'e']
|
|
True
|
|
|
|
Unpack long sequence
|
|
|
|
>>> a, b, c, *d, e, f, g = range(10)
|
|
>>> (a, b, c, d, e, f, g) == (0, 1, 2, [3, 4, 5, 6], 7, 8, 9)
|
|
True
|
|
|
|
Unpack short sequence
|
|
|
|
>>> a, *b, c = (1, 2)
|
|
>>> a == 1 and c == 2 and b == []
|
|
True
|
|
|
|
Unpack generic sequence
|
|
|
|
>>> class Seq:
|
|
... def __getitem__(self, i):
|
|
... if i >= 0 and i < 3: return i
|
|
... raise IndexError
|
|
...
|
|
>>> a, *b = Seq()
|
|
>>> a == 0 and b == [1, 2]
|
|
True
|
|
|
|
Unpack in for statement
|
|
|
|
>>> for a, *b, c in [(1,2,3), (4,5,6,7)]:
|
|
... print(a, b, c)
|
|
...
|
|
1 [2] 3
|
|
4 [5, 6] 7
|
|
|
|
Unpack in list
|
|
|
|
>>> [a, *b, c] = range(5)
|
|
>>> a == 0 and b == [1, 2, 3] and c == 4
|
|
True
|
|
|
|
Multiple targets
|
|
|
|
>>> a, *b, c = *d, e = range(5)
|
|
>>> a == 0 and b == [1, 2, 3] and c == 4 and d == [0, 1, 2, 3] and e == 4
|
|
True
|
|
|
|
Now for some failures
|
|
|
|
Unpacking non-sequence
|
|
|
|
>>> a, *b = 7
|
|
Traceback (most recent call last):
|
|
...
|
|
TypeError: 'int' object is not iterable
|
|
|
|
Unpacking sequence too short
|
|
|
|
>>> a, *b, c, d, e = Seq()
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: need more than 3 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):
|
|
...
|
|
test.test_unpack_ex.BozoError
|
|
|
|
Now some general starred expressions (all fail).
|
|
|
|
>>> a, *b, c, *d, e = range(10) # doctest:+ELLIPSIS
|
|
Traceback (most recent call last):
|
|
...
|
|
SyntaxError: two starred expressions in assignment
|
|
|
|
>>> [*b, *c] = range(10) # doctest:+ELLIPSIS
|
|
Traceback (most recent call last):
|
|
...
|
|
SyntaxError: two starred expressions in assignment
|
|
|
|
>>> *a = range(10) # doctest:+ELLIPSIS
|
|
Traceback (most recent call last):
|
|
...
|
|
SyntaxError: starred assignment target must be in a list or tuple
|
|
|
|
>>> *a # doctest:+ELLIPSIS
|
|
Traceback (most recent call last):
|
|
...
|
|
SyntaxError: can use starred expression only as assignment target
|
|
|
|
>>> *1 # doctest:+ELLIPSIS
|
|
Traceback (most recent call last):
|
|
...
|
|
SyntaxError: can use starred expression only as assignment target
|
|
|
|
>>> x = *a # doctest:+ELLIPSIS
|
|
Traceback (most recent call last):
|
|
...
|
|
SyntaxError: can use starred expression only as assignment target
|
|
|
|
"""
|
|
|
|
__test__ = {'doctests' : doctests}
|
|
|
|
def test_main(verbose=False):
|
|
import sys
|
|
from test import test_support
|
|
from test import test_unpack_ex
|
|
test_support.run_doctest(test_unpack_ex, verbose)
|
|
|
|
if __name__ == "__main__":
|
|
test_main(verbose=True)
|