From 5b8ed7f61546f6117bb8fd9e56d508c4408a7278 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Thu, 28 Dec 2017 02:13:32 +0100 Subject: [PATCH] Check for bytes and unicode in dicts for Python 2 --- jedi/evaluate/context/iterable.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/jedi/evaluate/context/iterable.py b/jedi/evaluate/context/iterable.py index 3f85ad80..7585852b 100644 --- a/jedi/evaluate/context/iterable.py +++ b/jedi/evaluate/context/iterable.py @@ -22,7 +22,7 @@ It is important to note that: """ from jedi import debug from jedi import settings -from jedi._compatibility import force_unicode +from jedi._compatibility import force_unicode, is_py3 from jedi.evaluate import compiled from jedi.evaluate import analysis from jedi.evaluate import recursion @@ -448,8 +448,21 @@ class FakeDict(_FakeArray): yield LazyKnownContext(compiled.create_simple_object(self.evaluator, key)) def py__getitem__(self, index): - if isinstance(index, bytes): - index = force_unicode(index) + if is_py3 and self.evaluator.environment.version_info.major == 2: + # In Python 2 bytes and unicode compare. + if isinstance(index, bytes): + index_unicode = force_unicode(index) + try: + return self._dct[index_unicode].infer() + except KeyError: + pass + elif isinstance(index, str): + index_bytes = index.encode('utf-8') + try: + return self._dct[index_bytes].infer() + except KeyError: + pass + return self._dct[index].infer() def dict_values(self):