PYTHON: TypeError: у объекта 'NoneType' нет атрибута '__getitem__' для TESTCASE - PullRequest
0 голосов
/ 21 февраля 2019

Я не понимаю, почему я получаю эти ошибки, потому что когда я передаю 'height' как -1, он должен изменить 'error' на 'Height должно быть .GE до нуля', и этот тестовый пример пройден.

Однако, когда я тестирую базовый вариант 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

TASE CASE: 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.assertEquals ('0', dict['height']) TypeError: у объекта 'NoneType' нет атрибута ' getitem '

1 Ответ

0 голосов
/ 22 февраля 2019

Если существует ключ 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...