8
votes

Python Regex "objet n'a aucun attribut"

J'ai mis en place une liste de pages que nous devons mettre à jour avec le nouveau contenu (utilisons les formats de supports). Dans le processus, je catalogue des pages qui ont correctement le nouveau contenu.

Voici l'idée générale de ce que je fais:

  1. Itérale via une structure de fichiers et obtenez une liste de fichiers
  2. Pour chaque fichier, lisez à un tampon et, à l'aide de la recherche sur REGEX, faites correspondre une balise spécifique
  3. Si correspondant, testez 2 autres matchs Regex
  4. Écrivez les correspondances résultantes (l'une ou l'autre) dans une base de données

    Tout fonctionne bien jusqu'à la 3ème correspondance de modèle Regex, où je reçois les éléments suivants:

    'objet' objet 'n'a aucun attribut' Group ' xxx

    merci.


0 commentaires

4 Réponses :


18
votes

Votre exception signifie que l'URLA a une valeur de rien. Étant donné que la valeur de l'URLA est déterminée par l'appel de RE.Search, il en résulte que RE.Search renvoie aucun. Et cela se produit lorsque la chaîne ne correspond pas au motif.

Si fondamentalement, vous devez utiliser: xxx

au lieu de ce que vous avez maintenant.


0 commentaires

3
votes

La raison de TypeError est que recherche ou correspondez généralement à un MatchObject ou A ou un Aucun . Seulement un de ceux-ci a une méthode . Et ce n'est pas un Aucun . Donc, vous devez faire: xxx

PS Pep-8 suggère d'utiliser 4 espaces d'indentation. Ce n'est pas seulement un avis, c'est une bonne pratique. Votre code est assez difficile à lire.


1 commentaires

ah. Merci. J'utilise des onglets dans le code, qui a été reformaté / réinterprété par le moteur de formatage de ce site. "L'URL n'est pas corrigée"



0
votes

Veuillez également noter que votre hypothèse erronée selon laquelle l'erreur était dans la correspondance troisième , quand elle était en fait dans la seconde. Cela semble avoir conduit à l'hypothèse erronée que le second match faisait quelque chose à invalider le troisième, vous envoyant une piste de passage.


0 commentaires

2
votes

J'ai eu le même problème.

Utilisation de Python2.6, vous pouvez le résoudre de cette manière: p>

for match in matches:
 if len(match) > 0:

  urla = re.search(pattern2, match)
  try:  
   urla.group(1):
   print filename, urla.group(1)
  excpet:
   print "Problem with",pattern2


  urlb = re.search(pattern3, match)
  try:
   urlb.group(1)
   print filename, urlb.group(1)
  except:
   print "Problem with",pattern3


1 commentaires

Petite typo: Sauf: au lieu de "sauf:" pour le bloc URLA.