web-dev-qa-db-ja.com

「NoneType」オブジェクトとは何ですか?

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)
60
insecure-IT

NoneTypeNoneオブジェクトのタイプであり、これは値なしを示すオブジェクトです。 Noneは、「何も返さない」関数の戻り値です。また、何かを検索し、それを見つけたり見つけなかったりする関数の一般的なデフォルトの戻り値です。たとえば、正規表現が一致しない場合はre.searchによって返され、キーにdictにエントリがない場合はdict.getによって返されます。 Noneを文字列またはその他のオブジェクトに追加することはできません。

変数の1つは、文字列ではなくNoneです。関数の1つでreturnを忘れたか、ユーザーがコマンドラインオプションを指定せず、optparseがそのオプションの値にNoneを与えた可能性があります。 Noneを文字列に追加しようとすると、その例外が発生します。

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)

groupSNMPGROUPCMD、またはV3PRIVCMDのいずれかに、値としてNoneがあります。

57
Burhan Khalid

NoneType は、単純に None シングルトンのタイプです:

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

上記の後者のリンクから:

None

タイプNoneTypeの唯一の値。 Noneは、デフォルト引数が関数に渡されない場合のように、値がないことを表すために頻繁に使用されます。 Noneへの割り当ては不正であり、SyntaxErrorを発生させます。

あなたの場合、連結しようとしているアイテムの1つがNoneであるように見えるため、エラーになります。

19
arshajii

これは、文字列をNoneであるものと連結しようとしていることを意味します。

Pythonの「null」はありません。NoneTypeはそのタイプです。

このコードは同じ種類のエラーを発生させます:

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

防御的なプログラミングのために、オブジェクトを使用する前に無効性をチェックする必要があります。

if obj is None:

または

if obj is not None:
8
Gürol Canbek

Pythonでは、値がないことを表すために、Nonetypes.NoneType.Noneを使用できます

3
santosh singh

エラーメッセージでは、値(この例では文字列とNone)を表示して2つのオブジェクトを連結できないことを伝える代わりに、Pythonインタープリターはオブジェクトのタイプを表示してこれを通知します連結しようとしました。すべての文字列の型はstrですが、単一のNoneインスタンスの型はNoneTypeと呼ばれます。

通常、NoneTypeを気にする必要はありませんが、この例では、type(None) == NoneTypeを知る必要があります。

2
Feuermurmel

次のようなことが原因でエラーが発生しています。
>>> 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オブジェクトは、他の言語のnullnilなどとほぼ同等です。

1
Dave

変数の1つに値が指定されていないため、NoneTypeです。これがなぜなのかを調べる必要があります。おそらくあなたの側の単純な論理エラーです。

0
SeanOTRS

Nonetypeは、Noneのタイプです。

こちらのドキュメントをご覧ください: https://docs.python.org/2/library/types.html#types.NoneType

0
Chogg