MODIFIER au format:
Ceci est le code d'origine
from __future__ import print_function
import socket
import sys
def socket_accept():
conn, address = s.accept()
print("Connection has been established | " + "IP " + address[0] + "| Port " + str(address[1]))
send_commands(conn)
conn.close()
def send_commands(conn):
while True:
cmd = raw_input()
if cmd == 'quit':
conn.close()
s.close()
sys.exit()
if len(str.encode(cmd)) > 0:
conn.send(str.encode(cmd))
client_response = str(conn.recv(1024), "utf-8")
print(client_response, end ="")
def main():
socket_accept()
main()
Je reçois cette erreur "TypeError: str () prend au plus 1 argument (2 donné)" à la variable "client_response"
Vous avez votre erreur ici:
client_response = str(conn.recv(1024), "utf-8")
Changez-le simplement en:
client_response = str(conn.recv(1024)).encode("utf-8")
Sur l'avant-dernière ligne, vous passez deux arguments à la fonction str
, bien que la fonction str
ne prenne qu'un seul argument dans Python 2. Il prend en fait jusqu'à trois arguments dans python 3
https://docs.python.org/2.7/library/functions.html?highlight=str#strhttps://docs.python.org/3.6/library/functions. html? highlight = str # str
Donc, vous essayez d'exécuter par inadvertance python 3 code dans un interpréteur python 2) ou vous consultez la mauvaise documentation de langue.
Donc, soit utilisez la réponse de @ franciscosolimas, si vous utilisez python 2, ou assurez-vous que vous utilisez python 3, si ce dernier vous pouvez également vouloir pour ajouter un argument de mot clé juste pour vous assurer que vous savez ce qui se passe à l'avenir
client_response = str(conn.recv(1024), encoding="utf-8")
J'ai eu une erreur similaire, peut-être pas la même ici (comme l'op) mais, c'était assez simple à corriger et je voulais partager, car je me suis retrouvé ici à partir de mes recherches sur l'erreur.
Traceback (most recent call last):
File "queries.py", line 50, in <module>
"WHERE ao.type='u';")
TypeError: str() takes at most 3 arguments (5 given)`
Qu'est-ce qui l'a corrigé pour moi dans
python3
convertissait mon,
à+
str("SELECT s.name + '.' + ao.name, s.name"
"FROM sys.all_objects ao",
"INNER JOIN sys.schemas s",
"ON s.schema_id = ao.schema_id",
"WHERE ao.type='u';"))
str("SELECT s.name + '.' + ao.name, s.name " +
"FROM sys.all_objects ao " +
"INNER JOIN sys.schemas s " +
"ON s.schema_id = ao.schema_id " +
"WHERE ao.type='u';")
J'ai dû ajouter mes propres espaces pour que la requête passed
fonctionne. Comme les virgules le faisaient en python ...
Réflexions et supposition éclairée: on dirait que dans mon cas, il a été rattrapé en essayant d'évaluer en bash/python un littéral u'
À ma connaissance, cette coupure pourrait être en bash car il n'y a pas de commande appelée u
et/ou en python u'
essayez-vous de unicode
une chaîne incomplète. Quoi qu'il en soit, il s'est cassé et a voulu partager ma solution.
À votre santé!
~ JayRizzo