Code python buggé, histoire sombre de régex, listes et consoles...
Résolu
Lecodeurhtmlcss
Messages postés
76
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
(Re)bonsoir à tous, et merci de votre aide,
Après modification de mon code de la dernière fois, et changement de méthode car ce changement n'amenait pas de réponses, je reviens avec de nouveaux problèmes python étranges et inquiétants.
Cette fois, ça m'a l'air plus compliqué. Pour faire simple, je mets mon code juste après.
En gros, j'essaie de noter les positions de la lettre demandée au milieu de mon string
Tout est normalement censé marcher (comme toujours...), or ça ne fonctionne pas, et la console s'excite un peu :
-> Donc l'erreur est un caractère non-fini comme début de liste. Mais qu'est-ce qu'un caractère non-fini ?
Plus important encore, qu'est-ce qui ne va pas ?
Promis, si ça fonctionne, je vous enverrait des mots personnalisés de mon cru avec mon générateur ;-D
Merci beaucoup !
Après modification de mon code de la dernière fois, et changement de méthode car ce changement n'amenait pas de réponses, je reviens avec de nouveaux problèmes python étranges et inquiétants.
Cette fois, ça m'a l'air plus compliqué. Pour faire simple, je mets mon code juste après.
from pyexcel_ods3 import get_data import re dat = get_data("occurences biogrammes.ods") data = str(dat) prem = input("Quelle est la première lettre ?") print(data) occurencesmatch = re.search(("['"+prem),data) print(occurencesmatch) occurrences = occurencesmatch[24:-13] print("les occurences sont " + occurences)
En gros, j'essaie de noter les positions de la lettre demandée au milieu de mon string
data, là où elle commence les crochets.
str(data)ressemble à ça :
OrderedDict([('Sheet1', [['_', 'd', 0], ['g', 'p', 0], ['b', 'v', 0], ['-', ',', 0], ['a', ')', 0.01],
Tout est normalement censé marcher (comme toujours...), or ça ne fonctionne pas, et la console s'excite un peu :
Traceback (most recent call last):
File "C:\Users\Utilisateur\...\programme py générateur", line 13, in <module>
occurencesmatch = re.search(("['"+prem),data)
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\re.py", line 185, in search
return _compile(pattern, flags).search(string)
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\re.py", line 288, in _compile
p = sre_compile.compile(pattern, flags)
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\sre_compile.py", line 764, in compile
p = sre_parse.parse(p, flags)
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\sre_parse.py", line 924, in parse
p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0)
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\sre_parse.py", line 420, in _parse_sub
not nested and not items))
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\sre_parse.py", line 526, in _parse
source.tell() - here)
re.error: unterminated character set at position 0
-> Donc l'erreur est un caractère non-fini comme début de liste. Mais qu'est-ce qu'un caractère non-fini ?
Plus important encore, qu'est-ce qui ne va pas ?
Promis, si ça fonctionne, je vous enverrait des mots personnalisés de mon cru avec mon générateur ;-D
Merci beaucoup !
A voir également:
- Code python buggé, histoire sombre de régex, listes et consoles...
- Code ascii - Guide
- Citizen code python - Accueil - Outils
- Code de déverrouillage oublié - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
1 réponse
Bonsoir
le plus simple quand on a des problèmes avec les regex, c'est d'utiliser un site ou un logiciel dédié à les tester.
Le gros avantage, est que souvent, cela colorise les captures dans le texte source. On voit ainsi ce qu'il se passe au fur et à mesure.
Il faut faire attention de se servir d'un outil qui utilise le même moteur de regex que toi (chaque implémentation est sensiblement différente).
Par exemple, https://regex101.com/ permet de choisir le moteur de regex de Python 2.7
Si je tape
Je suppose que tu veux trouver le caractère [ dans ce cas, comme tous les caractères utilisés dans les instructions, il faut le signaler par un échappement
Pour voir ce que ça capture
https://regex101.com/r/uSZygY/1
le plus simple quand on a des problèmes avec les regex, c'est d'utiliser un site ou un logiciel dédié à les tester.
Le gros avantage, est que souvent, cela colorise les captures dans le texte source. On voit ainsi ce qu'il se passe au fur et à mesure.
Il faut faire attention de se servir d'un outil qui utilise le même moteur de regex que toi (chaque implémentation est sensiblement différente).
Par exemple, https://regex101.com/ permet de choisir le moteur de regex de Python 2.7
Si je tape
['gdans la zone de saisie de la regex, ce site me retourne une erreur
[ Character class missing closing bracketparce qu'en fait les crochets ont une signification en regex, tu en ouvres un sans le refermer. Ce qui n'est pas compréhensible pour le moteur de regex.
Je suppose que tu veux trouver le caractère [ dans ce cas, comme tous les caractères utilisés dans les instructions, il faut le signaler par un échappement
\['g
Pour voir ce que ça capture
https://regex101.com/r/uSZygY/1