Python での入出力操作にソケットを使用する場合、次のことが可能です。次のエラーが発生しました:
TypeError: a bytes-like object is required, not 'str'
このエラーは、バイトのようなオブジェクトを期待する関数に文字列オブジェクトを渡そうとしたときに発生します。このエラーが発生する一般的なシナリオの 1 つは、UDP ソケット経由でデータを送信するコンテキストです。
次の Python コードを考えてみましょう:
from socket import * serverName = '127.0.0.1' serverPort = 12000 clientSocket = socket(AF_INET, SOCK_DGRAM) message = input('Input lowercase sentence:') clientSocket.sendto(message,(serverName, serverPort)) modifiedMessage, serverAddress = clientSocket.recvfrom(2048) print (modifiedMessage) clientSocket.close()
このコードを実行しようとすると、入力として文字列を入力すると、前述のエラーが発生します。 sendto 関数は、文字列ではなく、バイトや bytearray などのバイトのようなオブジェクトを期待します。
解決策:
この問題を解決するには、入力は次のようにする必要があります。ソケット経由で送信する前に、バイトのようなオブジェクトに変換する必要があります。これは、以下に示すように、encode() メソッドを使用することで実現できます。
<code class="python">clientSocket.sendto(message.encode(),(serverName, serverPort))</code>
この変更により、コードはバイトのようなオブジェクトを UDP ソケット経由で正しく送信し、TypeError を解決します。
以上がPython ソケット プログラミングで「TypeError: a bytes-like object is required, not \'str\'\」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。