#1 Le 08/09/2019, à 10:48
- MartinGouv
Python : erreur (need more than 1 value to unpack)
Bonjour j'essaie de réaliser un script pour un challenge dans lequel je dois envoyer certaines informations a un bot mais voila j'ai un souci :
Dans mon script je dois envoyer !ep1 au bot et il doit me répondre à ce format : (nb1/nb2)
Voici mon code je suis encore débutant et je ne comprends pas encore toutes mes erreurs :(
Le code erreur est : need more than 1 value to unpack
Voici mon code :
import math, socket
from time import sleep
def returnCollege(n1, n2):
step1 = math.sqrt(n1)
step2 = step1*n2
stepfinal = round(step2, 2)
return stepfinal
server = "irc.root-me.org"
channel = "#root-me_challenge"
port = "6667"
botnick = "MartinGouv"
sleep(1)
irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sleep(1)
print("Je me connecte au seveur :" + server)
sleep(1)
irc.connect((server, 6667))
sleep(1)
irc.send("USER " + botnick + " " + botnick + " " + botnick + " C'est fun ce bot !\n")
sleep(1)
irc.send("NICK " + botnick + "\n")
sleep(1)
irc.send("JOIN " + channel + "\n")
irc.send("PRIVMSG candy !ep1\r\n")
while True:
text = irc.recv(2040)
print(text)
if text.find("PING") !=1:
irc.send('PONG ' + text.split()[1] + '\r\n')
nb1, nb2 = text.split("/") <-------- L'erreur se situe ici
retour = returnCollege(nb1, nb2)
irc.send("PRIVMSG Candy !ep1 -rep " + retour + "\r\n")
Merci de m'aider car j'ai essayé de chercher sur différents forums mais impossible de trouver la solution
Dernière modification par MartinGouv (Le 08/09/2019, à 10:51)
Hors ligne
#2 Le 08/09/2019, à 11:13
- pingouinux
Re : Python : erreur (need more than 1 value to unpack)
Bonjour,
Dans la boucle while, quel est le résultat de
print(text)
Tu peux ajouter aussi
print(type(text))
Hors ligne
#3 Le 08/09/2019, à 11:20
- MartinGouv
Re : Python : erreur (need more than 1 value to unpack)
Bonjour,
Dans la boucle while, quel est le résultat deprint(text)
Tu peux ajouter aussi
print(type(text))
Le résultat c'est la réponse du serveur enfin... ce qu'il m'envoie.
@Vobul je ne vois pas ce que tu veux dire que devrais-je faire remplacer par une autre commande ? Laquelle ?
Merci a vous pour votre aide
Hors ligne
#4 Le 08/09/2019, à 11:36
- pingouinux
Re : Python : erreur (need more than 1 value to unpack)
Si tu ne donnes pas le retour des commandes que je t'indique en #2, je ne peux rien faire pour toi.
nb1, nb2 = text.split("/") <-------- L'erreur se situe ici
Cette commande est correcte si text contient un et un seul "/", et est de type str.
Hors ligne
#5 Le 08/09/2019, à 11:45
- MartinGouv
Re : Python : erreur (need more than 1 value to unpack)
Si tu ne donnes pas le retour des commandes que je t'indique en #2, je ne peux rien faire pour toi.
nb1, nb2 = text.split("/") <-------- L'erreur se situe ici
Cette commande est correcte si text contient un et un seul "/", et est de type str.
Je pense avoir compris mon erreur en fait comme text est le retour du serveur le .split essaie de le scinder avec '/' mais n'y arrive pas
Mais comment formuler en ligne de code scinder <nombre1>/<nombre2> a l'aide du '/'
Merci pour ta réponse voici le résultat de while text :
:irc.hackerzvoice.net NOTICE Auth :*** Looking up your hostname...
:irc.hackerzvoice.net NOTICE Auth :*** Found your hostname (185.185-64-87.adsl-dyn.isp.belgacom.be)
Traceback (most recent call last):
File "C:/Users/marti/Desktop/Tout mes projets de dvellopement/Projets/defi.py", line 36, in <module>
:irc.hackerzvoice.net NOTICE Auth :Welcome to HackerzVoice!
nb1, nb2 = text.split("/")
:irc.hackerzvoice.net 001 MartinGouv :Welcome to the HackerzVoice IRC Network MartinGouv!MartinGouv@185.185-64-87.adsl-dyn.isp.belgacom.be
ValueError: need more than 1 value to unpack
:irc.hackerzvoice.net 002 MartinGouv :Your host is irc.hackerzvoice.net, running version InspIRCd-2.0
:irc.hackerzvoice.net 003 MartinGouv :This server was created 19:52:09 Aug 12 2013
:irc.hackerzvoice.net 004 MartinGouv irc.hackerzvoice.net InspIRCd-2.0 BHIRSWcghiorswx FLMNPRSYabcefhijklmnopqrstvz FLYabefhjkloqv
:irc.hackerzvoice.net 005 MartinGouv AWAYLEN=200 CALLERID=g CASEMAPPING=rfc1459 CHANMODES=be,k,FLfjl,MNPRScimnprstz CHANNELLEN=64 CHANTYPES=# CHARSET=ascii ELIST=MU EXCEPTS=e EXTBAN=,NRSUcjmz FNC KICKLEN=255 MAP :are supported by this server
:irc.hackerzvoice.net 005 MartinGouv MAXBANS=60 MAXCHANNELS=20 MAXPARA=32 MAXTARGETS=20 MODES=20 NETWORK=HackerzVoice NICKLEN=31 OVERRIDE PREFIX=(Yqaohv)!~&@%+ SECURELIST SSL=0.0.0.0:6697 STARTTLS STATUSMSG=!~&@%+ :are supported by this server
:irc.hackerzvoice.net 005 MartinGouv TOPICLEN=307 USERIP VBANLIST WALLCHOPS WALLVOICES :are supported by this server
:irc.hackerzvoice.net 042 MartinGouv 959ABIZK6 :your unique ID
:irc.hackerzvoice.net 375 MartinGouv :irc.hackerzvoice.net message of the day
:irc.hackerzvoice.net 372 MartinGouv :- ██████████ ╻ ╻┏━┓┏━╸╻┏ ┏━╸┏━┓╺━┓╻ ╻┏━┓╻┏━╸┏━╸
:irc.hackerzvoice.net 372 MartinGouv :- ████████ ██ ┣━┫┣━┫┃ ┣┻┓┣╸ ┣┳┛┏━┛┃┏┛┃ ┃┃┃ ┣╸
:irc.hackerzvoice.net 372 MartinGouv :- ██ ██ ██ ╹ ╹╹ ╹┗━╸╹ ╹┗━╸╹┗╸┗━╸┗┛ ┗━┛╹┗━╸┗━╸
:irc.hackerzvoice.net 372 MartinGouv :- ██████████████
Process finished with exit code 1
Hors ligne
#6 Le 08/09/2019, à 12:18
- pingouinux
Re : Python : erreur (need more than 1 value to unpack)
Tu n'as toujours pas répondu à ma demande, mais si par hasard text était de type bytes, il faudrait faire :
nb1, nb2 = text.split(b"/")
Hors ligne
#7 Le 08/09/2019, à 12:31
- MartinGouv
Re : Python : erreur (need more than 1 value to unpack)
Tu n'as toujours pas répondu à ma demande, mais si par hasard text était de type bytes, il faudrait faire :
nb1, nb2 = text.split(b"/")
Je ne comprends ta demande ? Que me demandes tu de faire je ne comprends pas je t'ai montré ce que print(text) faisait c'est ce que tu me demandais nan ?
J'aimerais scinder 2 nombres avec '/' comment faire ?
Hors ligne
#8 Le 08/09/2019, à 12:49
- pingouinux
Re : Python : erreur (need more than 1 value to unpack)
Je ne vois pas le résultat de print(text) dans les sorties que tu montres.
On va essayer de faire autrement.
Tu remplaces
nb1, nb2 = text.split("/")
par
try: nb1, nb2 = text.split("/")
except:
print("Début des sorties")
print(text)
print(type(text))
print("Fin des sorties")
raise
et tu montres tout ce qui apparaît entre le début et la fin des sorties.
Hors ligne
#9 Le 08/09/2019, à 13:07
- MartinGouv
Re : Python : erreur (need more than 1 value to unpack)
Je ne vois pas le résultat de print(text) dans les sorties que tu montres.
On va essayer de faire autrement.
Tu remplacesnb1, nb2 = text.split("/")
par
try: nb1, nb2 = text.split("/") except: print("Début des sorties") print(text) print(type(text)) print("Fin des sorties") raise
et tu montres tout ce qui apparaît entre le début et la fin des sorties.
Voila le résultat :
Je me connecte au seveur :irc.root-me.org
:irc.hackerzvoice.net NOTICE Auth :*** Looking up your hostname...
:irc.hackerzvoice.net NOTICE Auth :*** Found your hostname (185.185-64-87.adsl-dyn.isp.belgacom.be) -- cached
:irc.hackerzvoice.net NOTICE Auth :Welcome to HackerzVoice!
:irc.hackerzvoice.net 001 MartinGouv :Welcome to the HackerzVoice IRC Network MartinGouv!MartinGouv@185.185-64-87.adsl-dyn.isp.belgacom.be
:irc.hackerzvoice.net 002 MartinGouv :Your host is irc.hackerzvoice.net, running version InspIRCd-2.0
:irc.hackerzvoice.net 003 MartinGouv :This server was created 19:52:09 Aug 12 2013
:irc.hackerzvoice.net 004 MartinGouv irc.hackerzvoice.net InspIRCd-2.0 BHIRSWcghiorswx FLMNPRSYabcefhijklmnopqrstvz FLYabefhjkloqv
:irc.hackerzvoice.net 005 MartinGouv AWAYLEN=200 CALLERID=g CASEMAPPING=rfc1459 CHANMODES=be,k,FLfjl,MNPRScimnprstz CHANNELLEN=64 CHANTYPES=# CHARSET=ascii ELIST=MU EXCEPTS=e EXTBAN=,NRSUcjmz FNC KICKLEN=255 MAP :are supported by this server
:irc.hackerzvoice.net 005 MartinGouv MAXBANS=60 MAXCHANNELS=20 MAXPARA=32 MAXTARGETS=20 MODES=20 NETWORK=HackerzVoice NICKLEN=31 OVERRIDE PREFIX=(Yqaohv)!~&@%+ SECURELIST SSL=0.0.0.0:6697 STARTTLS STATUSMSG=!~&@%+ :are supported by this server
:irc.hackerzvoice.net 005 MartinGouv TOPICLEN=307 USERIP VBANLIST WALLCHOPS WALLVOICES :are supported by this server
:irc.hackerzvoice.net 042 MartinGouv 959ABIZOO :your unique ID
:irc.hackerzvoice.net 375 MartinGouv :irc.hackerzvoice.net message of the day
:irc.hackerzvoice.net 372 MartinGouv :- ██████████ ╻ ╻┏━┓┏━╸╻┏ ┏━╸┏━┓╺━┓╻ ╻┏━┓╻┏━╸┏━╸
:irc.hackerzvoice.net 372 MartinGouv :- ████████ ██ ┣━┫┣━┫┃ ┣┻┓┣╸ ┣┳┛┏━┛┃┏┛┃ ┃┃┃ ┣╸
:irc.hackerzvoice.net 372 MartinGouv :- ██ ██ ██ ╹ ╹╹ ╹┗━╸╹ ╹┗━╸╹┗╸┗━╸┗┛ ┗━┛╹┗━╸┗━╸
:irc.hackerzvoice.net 372 MartinGouv :- ███████████
Debut des sorties
:irc.hackerzvoice.net NOTICE Auth :*** Looking up your hostname...
:irc.hackerzvoice.net NOTICE Auth :*** Found your hostname (185.185-64-87.adsl-dyn.isp.belgacom.be) -- cached
:irc.hackerzvoice.net NOTICE Auth :Welcome to HackerzVoice!
:irc.hackerzvoice.net 001 MartinGouv :Welcome to the HackerzVoice IRC Network MartinGouv!MartinGouv@185.185-64-87.adsl-dyn.isp.belgacom.be
:irc.hackerzvoice.net 002 MartinGouv :Your host is irc.hackerzvoice.net, running version InspIRCd-2.0
:irc.hackerzvoice.net 003 MartinGouv :This server was created 19:52:09 Aug 12 2013
:irc.hackerzvoice.net 004 MartinGouv irc.hackerzvoice.net InspIRCd-2.0 BHIRSWcghiorswx FLMNPRSYabcefhijklmnopqrstvz FLYabefhjkloqv
:irc.hackerzvoice.net 005 MartinGouv AWAYLEN=200 CALLERID=g CASEMAPPING=rfc1459 CHANMODES=be,k,FLfjl,MNPRScimnprstz CHANNELLEN=64 CHANTYPES=# CHARSET=ascii ELIST=MU EXCEPTS=e EXTBAN=,NRSUcjmz FNC KICKLEN=255 MAP :are supported by this server
:irc.hackerzvoice.net 005 MartinGouv MAXBANS=60 MAXCHANNELS=20 MAXPARA=32 MAXTARGETS=20 MODES=20 NETWORK=HackerzVoice NICKLEN=31 OVERRIDE PREFIX=(Yqaohv)!~&@%+ SECURELIST SSL=0.0.0.0:6697 STARTTLS STATUSMSG=!~&@%+ :are supported by this server
:irc.hackerzvoice.net 005 MartinGouv TOPICLEN=307 USERIP VBANLIST WALLCHOPS WALLVOICES :are supported by this server
:irc.hackerzvoice.net 042 MartinGouv 959ABIZOO :your unique ID
:irc.hackerzvoice.net 375 MartinGouv :irc.hackerzvoice.net message of the day
:irc.hackerzvoice.net 372 MartinGouv :- ██████████ ╻ ╻┏━┓┏━╸╻┏ ┏━╸┏━┓╺━┓╻ ╻┏━┓╻┏━╸┏━╸
:irc.hackerzvoice.net 372 MartinGouv :- ████████ ██ ┣━┫┣━┫┃ ┣┻┓┣╸ ┣┳┛┏━┛┃┏┛┃ ┃┃┃ ┣╸
:irc.hackerzvoice.net 372 MartinGouv :- ██ ██ ██ ╹ ╹╹ ╹┗━╸╹ ╹┗━╸╹┗╸┗━╸┗┛ ┗━┛╹┗━╸┗━╸
:irc.hackerzvoice.net 372 MartinGouv :- ███████████
<type 'str'>
Fin des sorties
Traceback (most recent call last):
File "C:/Users/marti/Desktop/Tout mes projets de dvellopement/Projets/defi.py", line 37, in <module>
nb1, nb2 = text.split("/")
ValueError: need more than 1 value to unpack
Process finished with exit code 1
J'espère que c'est ce que tu attendais !
Hors ligne
#10 Le 08/09/2019, à 13:36
- Roschan
Re : Python : erreur (need more than 1 value to unpack)
numbers = text.split('/')
if len(numbers) == 2:
retour = returnCollege(numbers[0], numbers[1])
irc.send("PRIVMSG Candy !ep1 -rep " + retour + "\r\n")
else:
print(text, "n'est pas de la forme 'nb1/nb2'")
Hors ligne
#11 Le 08/09/2019, à 13:44
- MartinGouv
Re : Python : erreur (need more than 1 value to unpack)
numbers = text.split('/') if len(numbers) == 2: retour = returnCollege(numbers[0], numbers[1]) irc.send("PRIVMSG Candy !ep1 -rep " + retour + "\r\n") else: print(text, "n'est pas de la forme 'nb1/nb2'")
Merci pour ta réponse mais voila le problème la variable numbers contient :
[':MartinGouv!MartinGouv@hzv-pia.7ji.a61t8n.IP JOIN :#root-me_challenge\r\n:irc.hackerzvoice.net 332 MartinGouv #root-me_challenge :pour parler des challenges, to chat about challs : #root-me | bots : Candy (tapez !help) et Pown3dBot -- no flood ! | bugs : contactez un admin\r\n:irc.hackerzvoice.net 333 MartinGouv #root-me_challenge Arod 1431865208\r\n:irc.hackerzvoice.net 353 MartinGouv = #root-me_challenge :zc0nf ArnC Pown3dBot baud123 papanireal MoziM Kattegaut pintoo BusyR MartinGouv @sambecks @Candy zTeeed ~g0uZ \r\n:irc.hackerzvoice.net 366 MartinGouv #root-me_challenge :End of ', 'NAMES list.\r\n']
Donc toujours pas bon
Hors ligne
#12 Le 08/09/2019, à 13:47
- MartinGouv
Re : Python : erreur (need more than 1 value to unpack)
Il faudrait faire en code mais je ne sais pas comment formuler :
if text.find(nombre/nombre):
numbers = text.split('/')
Dernière modification par MartinGouv (Le 08/09/2019, à 13:48)
Hors ligne
#13 Le 08/09/2019, à 13:47
- pingouinux
Re : Python : erreur (need more than 1 value to unpack)
Au temps pour moi, c'est bien ce que tu avais montré en #6.
La variable text est bien de type str, ce qui est correct, mais contient tout un baratin qui n'a rien à voir avec ce que tu attends.
C'est cette commande qui ne retourne pas le résultat que tu souhaites.
text = irc.recv(2040)
Hors ligne
#14 Le 08/09/2019, à 13:49
- MartinGouv
Re : Python : erreur (need more than 1 value to unpack)
Au temps pour moi, c'est bien ce que tu avais montré en #6.
La variable text est bien de type str, ce qui est correct, mais contient tout un baratin qui n'a rien à voir avec ce que tu attends.
C'est cette commande qui ne retourne pas le résultat que tu souhaites.text = irc.recv(2040)
Mais comment faire pour intercepter les nombres alors ?
Hors ligne
#15 Le 08/09/2019, à 14:12
- pingouinux
Re : Python : erreur (need more than 1 value to unpack)
Dans mon script je dois envoyer !ep1 au bot et il doit me répondre à ce format : (nb1/nb2)
Mais comment faire pour intercepter les nombres alors ?
Aucune idée.La chaîne que tu reçois n'est pas dans le format prévu, et il faut t'adresser à la personne ou au site qui t'a proposé le challenge.
Hors ligne
#16 Le 08/09/2019, à 15:07
- MartinGouv
Re : Python : erreur (need more than 1 value to unpack)
MartinGouv #1 a écrit :Dans mon script je dois envoyer !ep1 au bot et il doit me répondre à ce format : (nb1/nb2)
MartinGouv #15 a écrit :Mais comment faire pour intercepter les nombres alors ?
Aucune idée.La chaîne que tu reçois n'est pas dans le format prévu, et il faut t'adresser à la personne ou au site qui t'a proposé le challenge.
Voila j'ai réussi a intercepter la bonne phrase mais il faut couper la phrase pour avoir les nombres voici la phrase que j'ai eue
:Candy!Candy@root-me.org PRIVMSG MartinGouv :883 / 1668
Merci pour vos réponses
Hors ligne
#17 Le 08/09/2019, à 17:32
- pingouinux
Re : Python : erreur (need more than 1 value to unpack)
Si text contient
:Candy!Candy@root-me.org PRIVMSG MartinGouv :883 / 1668
nb1, nb2 = text.split(':')[-1].split('/')
nb1, nb2 sont alors de type str, pouvant inclure des espaces au début ou à la fin. À toi d'y faire le ménage ou de les convertir en entiers.
Hors ligne