# mode: run
# tag: dict, getitem
cimport cython
def test(dict d, index):
"""
>>> d = { 1: 10 }
>>> test(d, 1)
10
>>> test(d, 2)
Traceback (most recent call last):
KeyError: 2
>>> test(d, (1,2))
Traceback (most recent call last):
KeyError: (1, 2)
>>> import sys
>>> try: d[(1,)]
... except KeyError:
... args = sys.exc_info()[1].args
... if sys.version_info >= (2,5): print(args)
... else: print((args,)) # fake it for older CPython versions
((1,),)
>>> import sys
>>> try: test(d, (1,))
... except KeyError:
... args = sys.exc_info()[1].args
... if sys.version_info >= (2,5): print(args)
... else: print((args,)) # fake it for older CPython versions
((1,),)
>>> class Unhashable:
... def __hash__(self):
... raise ValueError
>>> test(d, Unhashable())
Traceback (most recent call last):
ValueError
>>> test(None, 1) # doctest: +ELLIPSIS
Traceback (most recent call last):
TypeError: ...object...
"""
return d[index]
def getitem_str(dict d, obj, str index):
"""
>>> d = {'abc': 1, 'xyz': 2, None: 3}
>>> getitem_str(d, d, 'abc')
(1, 1)
>>> getitem_str(d, d, 'xyz')
(2, 2)
>>> getitem_str(d, d, None)
(3, 3)
>>> class GetItem(object):
... def __getitem__(self, name): return d[name]
>>> getitem_str(d, GetItem(), 'abc')
(1, 1)
>>> getitem_str(d, GetItem(), 'xyz')
(2, 2)
>>> getitem_str(d, GetItem(), None)
(3, 3)
>>> getitem_str(d, GetItem(), 'no')
Traceback (most recent call last):
KeyError: 'no'
>>> class GetItemFail(object):
... def __getitem__(self, name): raise ValueError("failed")
>>> getitem_str(d, GetItemFail(), 'abc')
Traceback (most recent call last):
ValueError: failed
>>> getitem_str(d, GetItemFail(), None)
Traceback (most recent call last):
ValueError: failed
"""
return d[index], obj[index]
def getitem_unicode(dict d, obj, unicode index):
"""
>>> d = {'abc': 1, 'xyz': 2, None: 3}
>>> getitem_unicode(d, d, u'abc')
(1, 1)
>>> getitem_unicode(d, d, u'xyz')
(2, 2)
>>> getitem_unicode(d, d, None)
(3, 3)
>>> class GetItem(object):
... def __getitem__(self, name): return d[name]
>>> getitem_unicode(d, GetItem(), u'abc')
(1, 1)
>>> getitem_unicode(d, GetItem(), u'xyz')
(2, 2)
>>> getitem_unicode(d, GetItem(), None)
(3, 3)
>>> try: getitem_unicode(d, GetItem(), u'no')
... except KeyError as exc: assert exc.args[0] == u'no', str(exc)
... else: assert False, "KeyError not raised"
>>> class GetItemFail(object):
... def __getitem__(self, name): raise ValueError("failed")
>>> getitem_unicode(d, GetItemFail(), u'abc')
Traceback (most recent call last):
ValueError: failed
"""
return d[index], obj[index]
def getitem_tuple(dict d, index):
"""
>>> d = {1: 1, (1,): 2}
>>> getitem_tuple(d, 1)
(1, 2)
"""
return d[index], d[index,]
def getitem_in_condition(dict d, key, expected_result):
"""
>>> d = dict(a=1, b=2)
>>> getitem_in_condition(d, 'a', 1)
True
"""
return d[key] is expected_result or d[key] == expected_result
@cython.test_fail_if_path_exists('//NoneCheckNode')
def getitem_not_none(dict d not None, key):
"""
>>> d = { 1: 10 }
>>> test(d, 1)
10
>>> test(d, 2)
Traceback (most recent call last):
KeyError: 2
>>> test(d, (1,2))
Traceback (most recent call last):
KeyError: (1, 2)
"""
return d[key]