Чем отличается оператор return в интерпретаторе pycharm и python? - PullRequest
0 голосов
/ 07 ноября 2019

Когда я запускаю этот код в pycharm, я вызывал свой объект, но repr ничего не возвращает, и в моем интерпретаторе python он возвращает TypeError: __repr__ returned non-string (type NoneType). Почему это?

class DictionnaireOrdonne:

    liste_clefs = []
    liste_valeurs = []

    def __init__(self, **clefs_valeurs):

        self.clefs_valeurs = clefs_valeurs
        self._dictionnaire = {}

    def __repr__(self):

        return self.clefs_valeurs

    def __getitem__(self, key):

        return self._dictionnaire[key]

    def __setitem__(self, key, value):

        self._dictionnaire[key] = value


test = DictionnaireOrdonne(one=1, two=2)
test

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Когда вы вводите выражение в REPL Python, оно вычисляет выражение и пытается распечатать repr() результата. repr() вызывает __repr__() вашего объекта, проверяет, что возвращаемое значение является строкой, и выдает ошибку.

За пределами REPL (например, когда вы запускаете его в PyCharm) результат выражения просто отбрасывается, repr()не вызывается, поэтому ошибка не возникает.

0 голосов
/ 07 ноября 2019

Ошибка вполне понятна, в чем тут проблема. Ваш __repr__ метод не возвращает строку, он возвращает dict.

Хотя это и не совсем явно в документах , вы должны вернуть строку из __repr__.

Почему он ничего не возвращает в PyCharm вместо ошибки, я не могу вам сказать.

...