# -*- coding: utf-8 -*- __doc__ = u""" #>>> a #Traceback (most recent call last): #NameError: name 'a' is not defined #>>> test_module_scope() #>>> a """ #def test_module_scope(): # exec "a=1+1" # return __dict__['a'] def test_dict_scope1(): """ >>> test_dict_scope1() 2 """ cdef dict d = {} exec u"b=1+1" in d return d[u'b'] def test_dict_scope2(d): """ >>> d = {} >>> test_dict_scope2(d) >>> d['b'] 2 """ exec u"b=1+1" in d def test_dict_scope3(d1, d2): """ >>> d1 = {} >>> test_dict_scope3(d1, d1) >>> d1['b'] 2 >>> d1, d2 = {}, {} >>> test_dict_scope3(d1, d2) >>> (d1.get('b'), d2.get('b')) (None, 2) >>> d1, d2 = {}, {} >>> test_dict_scope3(d1, d2) >>> (d1.get('b'), d2.get('b')) (None, 2) """ exec u"b=1+1" in d1, d2 def test_dict_scope_ref(d1, d2): """ >>> d1, d2 = dict(a=11), dict(c=5) >>> test_dict_scope_ref(d1, d2) >>> (d1.get('b'), d2.get('b')) (None, 16) >>> d = dict(a=11, c=5) >>> test_dict_scope_ref(d, d) >>> d['b'] 16 >>> d1, d2 = {}, {} >>> test_dict_scope_ref(d1, d2) # doctest: +ELLIPSIS Traceback (most recent call last): NameError: ...name 'a' is not defined """ exec u"b=a+c" in d1, d2 def test_dict_scope_tuple2(): """ >>> test_dict_scope_tuple2() 2 """ cdef dict d = {} exec(u"b=1+1", d) # Py3 compatibility syntax return d[u'b'] def test_dict_scope_tuple3(d1, d2): """ >>> d1, d2 = {}, {} >>> test_dict_scope_tuple3(d1, d2) >>> (d1.get('b'), d2.get('b')) (None, 2) """ exec(u"b=1+1", d1, d2) def test_def(d, varref): """ >>> d = dict(seq = [1,2,3,4]) >>> add_iter = test_def(d, 'seq') >>> list(add_iter()) [2, 3, 4, 5] """ exec u""" def test(): for x in %s: yield x+1 """ % varref in d return d[u'test'] import sys def test_encoding(d1, d2): u""" >>> d = {} >>> test_encoding(d, None) >>> print(d['b']) üöä """ if sys.version_info[0] >= 3: s = "b = 'üöä'" else: s = "# -*- coding: utf-8 -*-" + "\n" + "b = u'üöä'" exec s in d1, d2 def test_encoding_unicode(d1, d2): u""" >>> d = {} >>> test_encoding_unicode(d, None) >>> print(d['b']) üöä """ if sys.version_info[0] >= 3: s = u"b = 'üöä'" else: s = u"b = u'üöä'" exec s in d1, d2 def test_compile(d): """ >>> d = dict(a=1, c=3) >>> test_compile(d) >>> d['b'] 4 """ c = compile(u"b = a+c", u"", u"exec") exec c in d def exec_invalid_type(x): """ >>> exec_invalid_type(42) Traceback (most recent call last): TypeError: exec: arg 1 must be string, bytes or code object, got int """ exec x in {}