Python: ошибки NoneType. Они выглядят знакомо - PullRequest
0 голосов
/ 11 сентября 2009

Я искал NoneType полдня. Я поместил 'print' и dir () на протяжении всего поколения объекта, представленного t2. Я посмотрел на структуру данных после сбоя, используя 'post mortem', и нигде не могу найти NoneType. Мне было интересно, возможно, это одна из тех ошибок, которые инициируются какой-то другой частью кода (желаемое за действительное), и мне было интересно, если кто-нибудь признает это? (k2 - это int)

 File "C:\Python26\Code\OO.py", line 48, in removeSubtreeFromTree
    assert getattr(parent, branch) is subtreenode
TypeError: getattr(): attribute name must be string, not 'NoneType

 File "C:\Python26\Code\OO.py", line 94, in theSwapper
    st2, p2, b2 = self.removeSubtreeFromTree(t2, k2)
TypeError: 'NoneType' object is not iterable

Ответы [ 4 ]

5 голосов
/ 11 сентября 2009

NoneType - это тип объекта None. Итак, в первой ошибке branch равно None. Вторая ошибка сложнее диагностировать, не видя исходного кода, но предполагает, что где-то в t2 структура данных не совсем такая, как вы думаете.

Когда это касается меня, я обычно нахожу, что я забыл завершить одну из своих функций оператором return. Функции без явного возврата вернут None.

2 голосов
/ 11 сентября 2009

по какой-то причине в точке линии утверждения значение branch равно None.

Если ваше второе исключение является отдельным, то, скорее всего, происходит вызов метода self.removeSubtreeFromTree(), возвращающий None, вместо последовательности (например, кортежа), поэтому, когда Python пытается распаковать его в переменные, происходит сбой .

1 голос
/ 11 сентября 2009

Я согласен с Манагу, что, скорее всего, вы забыли вернуть значение из функции. Я делаю это все время.

В качестве еще одной возможности, я предполагаю, что вы пишете какую-то древовидную структуру данных. Возможно ли, что вы используете None для указания «у этого узла нет дочерних элементов», и вы неправильно обрабатываете этот случай?

0 голосов
/ 11 сентября 2009

Еще одна вещь, которая меня привлекла, - это встроенные функции, такие как list.append () (не может использовать это в вызове функции, list.append () возвращает None и изменяет переменную).

Я провел лучшую часть полутора дней в погоне за этой ошибкой ....

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