return 语句在 pycharm 和 python 解释器中有何不同?

How is return statement different in pycharm and python interpreter?

当我 运行 pycharm 中的这段代码时,我调用了我的对象,但 repr 没有 return 任何东西,而在我的 python 解释器中它 returns 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

错误很清楚这里的问题是什么。您的 __repr__ 方法不是 return 字符串,而是 return 字典。

虽然在 docs 中不完全明确,但您必须 return 来自 __repr__ 的字符串。

为什么 return 在 PyCharm 中什么也没有,而不是我无法告诉你的错误。

当您在 Python REPL 中输入表达式时,它会计算表达式并尝试打印出结果的 repr()repr() 调用对象的 __repr__(),检查 return 值是否为字符串并抛出错误。

在 REPL 之外(例如,当你在 PyCharm 中 运行 时)表达式结果被简单地丢弃,repr() 不会被调用,所以不会引发错误。