Что такое объект "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)
Ответы
Ответ 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. Вам нужно будет понять, почему это так, это, вероятно, простая логическая ошибка с вашей стороны.