pythonスクリプトを実行すると、このエラーが発生します。
TypeError: cannot concatenate 'str' and 'NoneType' objects
「str」は文字列を意味すると確信していますが、「NoneType」オブジェクトが何であるかはわかりません。私のスクリプトは2行目でありますが、最初の1行が動作するのは、その行のコマンドが期待どおりに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)
NoneType
はNone
オブジェクトのタイプであり、これは値なしを示すオブジェクトです。 None
は、「何も返さない」関数の戻り値です。また、何かを検索し、それを見つけたり見つけなかったりする関数の一般的なデフォルトの戻り値です。たとえば、正規表現が一致しない場合はre.search
によって返され、キーにdictにエントリがない場合はdict.get
によって返されます。 None
を文字列またはその他のオブジェクトに追加することはできません。
変数の1つは、文字列ではなくNone
です。関数の1つでreturn
を忘れたか、ユーザーがコマンドラインオプションを指定せず、optparse
がそのオプションの値にNone
を与えた可能性があります。 None
を文字列に追加しようとすると、その例外が発生します。
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
group
、SNMPGROUPCMD
、またはV3PRIVCMD
のいずれかに、値としてNone
があります。
これは、文字列をNone
であるものと連結しようとしていることを意味します。
Pythonの「null」はありません。NoneType
はそのタイプです。
このコードは同じ種類のエラーを発生させます:
>>> bar = "something"
>>> foo = None
>>> print foo + bar
TypeError: cannot concatenate 'str' and 'NoneType' objects
防御的なプログラミングのために、オブジェクトを使用する前に無効性をチェックする必要があります。
if obj is None:
または
if obj is not None:
Pythonでは、値がないことを表すために、None
値types.NoneType.None
を使用できます
エラーメッセージでは、値(この例では文字列とNone
)を表示して2つのオブジェクトを連結できないことを伝える代わりに、Pythonインタープリターはオブジェクトのタイプを表示してこれを通知します連結しようとしました。すべての文字列の型はstr
ですが、単一のNone
インスタンスの型はNoneType
と呼ばれます。
通常、NoneType
を気にする必要はありませんが、この例では、type(None) == NoneType
を知る必要があります。
次のようなことが原因でエラーが発生しています。>>> None + "hello world"
>>>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
PythonのNoneオブジェクトは、他の言語のnull、nilなどとほぼ同等です。
変数の1つに値が指定されていないため、NoneTypeです。これがなぜなのかを調べる必要があります。おそらくあなたの側の単純な論理エラーです。
Nonetypeは、Noneのタイプです。
こちらのドキュメントをご覧ください: https://docs.python.org/2/library/types.html#types.NoneType