2016-09-07 3 views
0

Also, ich habe ein paar Tweets mit einigen Sonderzeichen und Formen. Ich versuche ein Wort in diesen Tweets zu finden, indem ich sie in Kleinbuchstaben umwandle. Die Funktion löst einen "AttributeError" aus, wenn sie auf diese Sonderzeichen stößt. Daher möchte ich meine Funktion so ändern, dass sie diese Datensätze überspringt und andere verarbeitet.Ausnahme zu "AttributeError" hinzufügen python

Kann ich Ausnahme zu "AttributeError" in Python hinzufügen. Ich möchte, dass es eher wie ein "ifror resume next"/Fehlerbehandlungsanweisung handelt.

Ich bin derzeit mit: -

def word_in_text(word, text): 
try: 
    print text 
    word = word.lower() 
    text = text.lower() 
    match = re.search(word, text) 
    if match: 
     return True 
    else: 
     return False 
except(AttributeError, Exception) as e: 
    continue 

Fehler Beitrag mit @ galah92 Empfehlungen: -

Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\pandas\core\series.py", line 2220, in apply 
    mapped = lib.map_infer(values, f, convert=convert_dtype) 
    File "pandas\src\inference.pyx", line 1088, in pandas.lib.map_infer (pandas\lib.c:63043) 
    File "<input>", line 1, in <lambda> 
    File "<input>", line 3, in word_in_text 
    File "C:\Python27\lib\re.py", line 146, in search 
    return _compile(pattern, flags).search(string) 
TypeError: expected string or buffer 

Ich bin neu in Python und Selbst es zu lernen. Jede Hilfe wird wirklich geschätzt.

+0

Meinst du "außer"? – Li357

+0

Ich habe versucht 'außer', aber es funktioniert auch. –

+0

Was ist die Logik, die den 'AttributeError' verursacht? Haben Sie überlegt, die eingebaute Funktion 'hasattr()' zu verwenden? –

Antwort

0

Sie können re.IGNORECASE Flag verwenden, wenn Sie search().
So müssen Sie sich nicht mit lower() oder Ausnahmen befassen.

def word_in_text(word, text): 
    print text 
    if re.search(word, text, re.IGNORECASE): 
     return True 
    else: 
     return False 

Als Beispiel, wenn I auszuführen:

from __future__ import unicode_literals # see edit notes 
import re 

text = "CANCION! You &amp" 
word = "you" 

def word_in_text(word, text): 
    print(text) 
    if re.search(word, text, re.IGNORECASE): 
     return True 
    else: 
     return False 

print(word_in_text(word, text)) 

Der Ausgang ist:

CANCION! You &amp 
True 

EDIT

Für Python 2 sollten Sie oben im Skript from __future__ import unicode_literals hinzufügen, um sicherzustellen, dass Sie alles in UTF-8 kodieren.
Sie können mehr darüber lesen here.

+0

für mich heißt es: - ** text = "CANCION! Sie & amp" : Verweis auf ungültige Zeichennummer: Zeile 1, Spalte 113 ** –

+0

Das ist ein Python 2 Problem . Ich habe meine Antwort bearbeitet. – galah92

+0

Ich habe versucht, aber es gibt immer noch den gleichen Fehler. Ich benutze Eclipse für Python, denkst du, dass das Problem sein kann? –

Verwandte Themen