没有在_init_方法中输入

时间:2015-03-09 00:05:48

标签: python

我是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类型,就像字符串变量一样,它可以正常工作。

3 个答案:

答案 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