PYTHON:类型错误:'NoneType'对象没有 TESTCASE 的属性'__getitem__'



我不明白为什么要遇到此错误,因为当我将"高度"通过-1时,它必须将'错误'更改为"高度必须.ge为.ge to Zero"然后测试案例通过。

但是,当我测试基本案例0时。它说列表中没有什么?有人可以解释为什么吗?或告诉我我的代码怎么了

def adjust(values):
      #default
      height = 0
      if ('height' in values):
          try:
          height = float(values['height'])
      except ValueError:
          values['error'] = 'non-numeric height'
          return values
      if height < 0:
          values['error'] = 'Heights needs to be .GE 0'
          return values

测试案例:100_101失败,通过100_120

def test100_010HeightLowBound(self):
    dict = nav.adjust({'op': 'adjust', 'observation': '3d.13','height': '0'})
    self.assertEquals('0', dict['height'])
def test100_020OutofBound(self):
    dict = nav.adjust({'op': 'adjust', 'observation': '3d1.3', 'height': '-1'})
    self.assertEquals('Heights needs to be .GE 0', dict['error'])

由于测试失败而产生错误:self.sersertequals('0',dict ['height'])typeError:'nontype'对象没有属性' getItem '

如果存在height密钥,并且height >= 0将不会返回。这意味着dict将是None,您将获得所遇到的错误。您只需要确保在所有情况下都返回可用值。

def adjust(values):
      height = 0
      if ('height' in values):
          try:
             height = float(values['height'])
          except ValueError:
              values['error'] = 'non-numeric height'
              return values
      if height < 0:
          values['error'] = 'Heights needs to be .GE 0'
      return values # Return values regardless of the previous checks

似乎没有必要返回values。您要做的就是突变参数。您可以使用突变的参数。

def adjust2(values):
      height = 0
      if ('height' in values):
          try:
              height = float(values['height'])
          except ValueError:
              values['error'] = 'non-numeric height'
              return
      if height < 0:
          values['error'] = 'Heights needs to be .GE 0'
def test100_010HeightLowBound(self):
    data = {'op': 'adjust', 'observation': '3d.13','height': '0'}
    nav.adjust(data)
    self.assertEquals('0', data['height'])

,如评论中所述,命名变量与内置的名称相同是一个坏主意。我将dict重命名为data,因此您不会阴影内置的dict函数。

最新更新