我是python的初学者。我无法理解类型为None的简单事物。当我在构造函数中为我的参数指定None值时。我收到错误。诀窍是什么?代码有错误:
class A(object):
def __init__(self):
self.root = None
def method_a(self, foo):
if self.root is None:
print self.root + ' ' + foo
a = A() # We do not pass any argument to the __init__ method
a.method_a('Sailor!') # We only pass a single argument
错误:
Traceback (most recent call last):
File "C:/Users/Dmitry/PycharmProjects/Algorithms/final_bst.py", line 11, in <module>
a.method_a('Sailor!') # We only pass a single argument
File "C:/Users/Dmitry/PycharmProjects/Algorithms/final_bst.py", line 7, in method_a
print self.root + ' ' + foo
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
只要在 init 中更改None类型,就像字符串变量一样,它可以正常工作。
答案 0 :(得分:2)
__init__
中的错误不,但稍后,在您尝试print
的表达式中
print self.root + ' ' + foo
您可以使用+
来连接字符串,但None
不是字符串。
因此,请使用字符串格式:
print '{} {}'.format(self.root, foo)
或者,不那么优雅,明确地制作字符串:
print str(self.root) + ' ' + foo
答案 1 :(得分:1)
问题是你试图用两个字符串连接None&#39; &#39;和#Sailor!&#39;,并且None不是字符串。
答案 2 :(得分:1)
您正在使用字符串连接None
。但是None
不是字符串,它是一个对象,如果要打印一个必须使用str(<Obj>)
的对象,这将调用该对象的__str__
方法,或者
如果没有给出__str__
方法,则会打印__repr__
的结果。
__str__
和__repr__
之间的差异已解释为here。