Подтвердить что ты не робот

Что такое объект "NoneType"?

Я получаю эту ошибку, когда запускаю мой python script:

TypeError: cannot concatenate 'str' and 'NoneType' objects

Я уверен, что "str" означает строку, но я не знаю, что такое объект "NoneType". Мой script дерьмо во второй строке, я знаю, что первый работает, потому что команды из этой строки находятся в моем asa, как я ожидал. Сначала я думал, что это может быть потому, что я использую переменные и пользовательский ввод внутри send_command.

Все в "CAPS" являются переменными, все в "нижнем регистре" вводятся из параметров "parser.add_option".

Я использую pexpect и optparse

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)
4b9b3361

Ответ 1

NoneType - это тип объекта None, который является объектом, который не указывает значение. None - возвращаемое значение функций, которые "ничего не возвращают". Это также общее значение возвращаемого значения по умолчанию для функций, которые ищут что-то и могут или не могут найти его; например, он возвращается re.search, когда регулярное выражение не соответствует, или dict.get, когда ключ не имеет записи в dict. Вы не можете добавить None к строкам или другим объектам.

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

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)

Один из group или SNMPGROUPCMD или V3PRIVCMD имеет None как его значение.

Ответ 2

NoneType - это просто тип None singleton:

>>> type(None)
<type 'NoneType'>

Из последней ссылки выше:

None

Единственное значение типа NoneType. None часто используется для представления отсутствия значения, так как аргументы по умолчанию не передаются функции. Присвоения None являются незаконными и поднимают a SyntaxError.

В вашем случае, похоже, что один из элементов, которые вы пытаетесь объединить, - это None, следовательно, ваша ошибка.

Ответ 3

Это означает, что вы пытаетесь объединить строку с чем-то, что есть None.

None - это "нуль" Python, а NoneType - его тип.

Этот код вызовет такую ​​же ошибку:

>>> bar = "something"
>>> foo = None
>>> print foo + bar
TypeError: cannot concatenate 'str' and 'NoneType' objects

Ответ 4

В целях защитного программирования перед использованием следует проверить объекты на предмет недействительности.

if obj is None:

или

if obj is not None:

Ответ 5

В Python, чтобы представить отсутствие значения, вы можете использовать значение None types.NoneType.None

Ответ 6

В сообщении об ошибке вместо того, чтобы сообщать вам, что вы не можете конкатенировать два объекта, показывая их значения (строка и None в этом примере), интерпретатор Python сообщает об этом, показывая типы объектов, которые вы пытались объединиться. Тип каждой строки str, тогда как тип одиночного экземпляра None называется NoneType.

Обычно вам не нужно беспокоиться о NoneType, но в этом примере необходимо знать, что type(None) == NoneType.

Ответ 7

Ваша ошибка происходит из-за чего-то вроде этого:
>>> None + "hello world"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
→ >

Python Ни один объект не эквивалентен нулевому, нолю и т.д. на других языках.

Ответ 8

Одна из переменных не получила никакого значения, поэтому это NoneType. Вам нужно будет понять, почему это так, это, вероятно, простая логическая ошибка с вашей стороны.