self.check_for_coercion_error(dst_type, fail=True)
# this will be a unicode string in Py3, so make sure we can decode it
- if self.value.encoding:
+ if self.value.encoding and self.unicode_value is None:
encoding = self.value.encoding
try:
self.value.decode(encoding)
- except UnicodeDecodeError:
+ except (UnicodeDecodeError, AttributeError):
error(self.pos, "String decoding as '%s' failed. Consider using a byte string or unicode string explicitly, or adjust the source code encoding." % encoding)
return self
error(self.pos, "Builtin 'locals()' called with wrong number of args, expected 0, got %d" % len(node.args))
return node
pos = node.pos
- items = [ExprNodes.DictItemNode(pos,
- key=ExprNodes.StringNode(pos, value=var),
- value=ExprNodes.NameNode(pos, name=var)) for var in lenv.entries]
+ items = [ ExprNodes.DictItemNode(pos,
+ key=ExprNodes.StringNode(pos, value=var, unicode_value=var),
+ value=ExprNodes.NameNode(pos, name=var))
+ for var in lenv.entries ]
return ExprNodes.DictNode(pos, key_value_pairs=items)
# cython.foo