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()
不会被调用,所以不会引发错误。
当我 运行 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()
不会被调用,所以不会引发错误。