Python3.6 : convertire un 'generator' en 'b-like'
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je debute totalement en python3 et je me retrouve face a un bug que je ne parvien pas a resoudre.
cette erreur ne semble pas etre tres connue sur google car je n'est rien trouvé ...
voici mon code :
je debute totalement en python3 et je me retrouve face a un bug que je ne parvien pas a resoudre.
Traceback (most recent call last): File "prog05", line 20, in <module> main() File "prog05", line 16, in main print(cipherXOR(fd.readline(), fd.readlines())) File "prog05", line 11, in cipherXOR return hexlify(''.join(xor_char(c, k)) for c,k in zip(msg, cycle(key))) TypeError: a bytes-like object is required, not 'generator'
cette erreur ne semble pas etre tres connue sur google car je n'est rien trouvé ...
voici mon code :
#!/usr/bin/python from binascii import hexlify, unhexlify from itertools import cycle import sys def xor_char(c1, c2): return chr(ord(c1) ^ ord(c2)) def cipherXOR(key, msg): return hexlify(''.join(xor_char(c, k)) for c,k in zip(msg, cycle(key))) def main(): for arg in sys.argv[1:]: with open(arg, "r") as fd: print(cipherXOR(fd.readline(), fd.readlines())) fd.close() if __name__ == "__main__": main()
1 réponse
Bonjour.
Je ne sais pas ce qu'est supposé faire votre script.
Il y a un problème car votre générateur n'est pas dans le join, de plus hexlify attend un type byte en argument.
Ce qui fait que votre fonction devrait ressembler à :
Autre chose, il n'est pas nécessaire d'utiliser close sur vos fichiers si vous utilisez with.
Je ne sais pas ce qu'est supposé faire votre script.
Il y a un problème car votre générateur n'est pas dans le join, de plus hexlify attend un type byte en argument.
Ce qui fait que votre fonction devrait ressembler à :
def cipherXOR(key, msg): return hexlify(''.join(xor_char(c, k) for c,k in zip(msg, cycle(key))).encode())
Autre chose, il n'est pas nécessaire d'utiliser close sur vos fichiers si vous utilisez with.
mon scipt prend en parametre le nom d'un fichier, il recupére la premiere ligne de ce fichier qui correspond a la clé de chiffrage dans lequel le reste de ce méme fichier doit etre chiffré avec le system : repeating key XOR
mais etant debutant sur le python j'imagine que ce n'est probablement pas la meilleurs des solution pour repondre a ce probléme. je suis a ton ecoute si tu as mieux a me proposer .
j'ai corrigé ma fonction tel que tu me la proposé, mais mon programme reste buger ...
si tu peut me venir en aide la dessus egalement ce serais top.
cette erreur je la comprend mais pour la corriger ca va etre coton. une boucle j'imagine ...
Mais rien ne vous empêche de créer une fonction intermédiaire pour faire cela, c'est à vous de voir :)
merci de votre aide, cela fonctionne presque parfaitement.
je doit juste avoir un soucis dans mon operation mais je devrait pouvoir la corriger seul .
passe un agréable Dimanche.