Ошибка Python: аргумент 1 должен быть буфером или байтами не должен быть - PullRequest
1 голос
/ 28 февраля 2011

Программа проста, она предназначена для подключения к комнате IRC.Проблема в том, что когда я пытаюсь подключить к нему своего бота, выдает ошибку в названии.Я не уверен, что они хотят вместо строки.Я не уверен, к какому буферу или байту относится.Другие заставили этот скрипт работать, но он не работает для меня.Примечание: это не вредоносный irc-бот или что-то еще.Это всего лишь упражнение с базовыми сетями.

import socket

network = 'irc.rizon.net'
port = 6667
irc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
irc.connect((network,port))

irc.send("NICK PyBot\r\n")
irc.send("USER Pybot Pybot Pybot : Python IRC\r\n")
irc.send("JOIN #pychat\r\n")
irc.send("PART #pychat\r\n")
irc.send("QUITE\r\n")
irc.close()

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Вы используете Python 3, в то время как скрипт был написан для Python 2. Быстрое решение состоит в том, чтобы сделать строковые литералы байтовыми литералами, добавив перед ними b:

irc.sendall(b"NICK PyBot\r\n")
irc.sendall(b"USER Pybot Pybot Pybot : Python IRC\r\n")
irc.sendall(b"JOIN #pychat\r\n")
irc.sendall(b"PART #pychat\r\n")
irc.sendall(b"QUITE\r\n")

В Python 3 str - это последовательность символов. bytes - это последовательность байтов.

РЕДАКТИРОВАТЬ: Я думаю, что Жан имеет в виду тот факт, что socket.send не гарантирует отправку всех байтов. Быстрое решение для , что должен использовать sendall.

1 голос
/ 28 февраля 2011

Предполагается, что вы используете Python 3.x:

Вы должны отправить bytes через сокет, а не str.

irc.send(b"NICK PyBot\r\n")

Хорошее объяснение bytes против str см. В главе Strings Dive Into Python 3.

...