2016-04-25 4 views
0
for printJobString in logfile: 
    userRegex = re.search('(\suser:\s)(.+?)(\sprinter:\s)', printJobString) 
    if userRegex: 
     userString = userRegex.group(2) 
     pagesInt = int(re.search('(\spages:\s)(.+?)(\scode:\s)', printJobString).group(2)) 

oben ist mein Code, wenn ich dieses Programm im Modul betreiben ich am Ende immer,RegExpr in Python

Traceback (most recent call last): 
    File "C:\Users\brandon\Desktop\project3\project3\pages.py", line 45, in <module> 
    log2hist("log") # version 2. 
    File "C:\Users\brandon\Desktop\project3\project3\pages.py", line 29, in log2hist 
    pagesInt = int(re.search('(\spages:\s)(.+?)(\scode:\s)', printJobString).group(2)) 
AttributeError: 'NoneType' object has no attribute 'group' 

ich diesen Fehler wissen, bedeutet, dass die Suche None zurückkehrt, aber ich bin nicht sicher, wie man mit diesem Fall umgeht. Jede Hilfe würde geschätzt werden, sehr neu für Python und immer noch die Grundlagen zu lernen.

Ich schreibe ein Programm, das die Anzahl der Seiten drucken soll, die ein Benutzer hat. 180.186.109.129 code: knh benutzer: luis drucker: core 2 pages: 32 ist eine Zielzeichenfolge, meine Python-Datei versucht, eine Datendatei zu erstellen, die eine Zeile für jeden Benutzer enthält und die Gesamtzahl der gedruckten Seiten enthält

+1

Dies ist ein Regex-Problem, kein Python-Problem. Sie sollten Ihren Regex unter http://regexr.com/ debuggen oder eine Frage mit Ihrem Regex-Muster und einer Beispiel-Zielzeichenfolge posten. –

+0

bearbeitet, um zu versuchen, in meinem Ziel klarer zu sein @ap – bkennedy

+0

@ap Ich versuche, regexr.com zu verwenden, aber ich denke, das Format, das ich benutze, um die Datei nach "user:" "printer:" zu durchsuchen, ist richtig, ich Ich bin mir nicht sicher, was ich hier falsch mache, meines Wissens sucht es nach diesen Wörtern und ignoriert die weißen Bereiche. Mein Denkprozess ist eindeutig falsch, da er nicht tut, was er meiner Meinung nach tun sollte. – bkennedy

Antwort

2

Der Grund ist es passiert ist, weil Ihr regexp hat nichts zu finden und gibt keine

re.search('(\spages:\s)(.+?)(\scode:\s)') returns None 

Verwendung einer if-Anweisung zu testen, ob es nicht None ist, bevor Sie zu einer Gruppe versuchen

for printJobString in logfile: 
    userRegex = re.search('(\suser:\s)(.+?)(\sprinter:\s)', printJobString) 
    if userRegex: 
     userString = userRegex.group(2) 
     pagesInt = re.search('(\spages:\s)(.+?)(\scode:\s)', printJobString) 

     if pagesInt: 
      pagesInt = int(pageInts.group(2)) 
+0

Ich habe das zu meinem Code hinzugefügt, aber ich bekomme den Fehler ** Traceback (letzter Aufruf zuletzt): Datei "C: \ Benutzer \ brandon \ Desktop \ project3 \ project3 \ pages.py", Zeile 48, in log2hist ("log") # Version 2. Datei "C: \ Benutzer \ brandon \ Desktop \ projekt3 \ projekt3 \ seiten.py", Zeile 30, in log2hist if pageInt: UnboundLocalError: lokale Variable 'pageInt' referenziert vor der Zuweisung ** @danidee – bkennedy

+0

@bkennedy, weil dein 'if userRegex' nicht auf 'wahr' setzt, wird deine' pagesInt' nie zugewiesen; dann, wenn Sie es in der nächsten "if" überprüfen, ist es nicht da. –