2016-03-28 7 views
0

Ich versuche, Zeichenfolgen auszugeben, die aus einem regex Ausdruck eingelesen werden. Für einige der Textzeilen, die mit meiner Regex-Suche eingelesen werden, gibt es keine Daten, so dass nichts zu lesen ist. Wenn dies auftritt, erhalte ich den Fehler "AttributeError: 'NoneType' object has no attribute 'group'. Könnte jemand mir helfen, eine Arbeit in meinem Code zu schreiben, so dass, wenn nichts von der Regex-Suche eingelesen wird, die Variable nicht ausgedruckt wird? Ich habe versucht if (col3.group() != None):, aber das scheint nicht zu funktionieren.Problemumgehung keine Variable von Regex-Suche eingelesen

#!/usr/bin/env python 

#purpose of script: To conduct an nslookup on a list of IP addresses 

import os, csv, re 

#get list of IP's from file 
inFile='filesystem/Book1.txt' 
ipList = [] 
with open(inFile, 'rb') as fi: 
    for line in fi: 
     line = line.replace(',', '')#remove commas and \n from list 
     line = line.replace('\r', '') 
     line = line.replace('\n', '') 
     ipList.append(line)# create list of IP addresses to lookup 

#output results 
outFile='filesystem/outFile.txt' 
fo = open(outFile, 'w') 
inc=0 
writeToFileValue = "" 
for e in ipList: 
    result = os.popen('nslookup ' + e).read()#send nsLookup command to cmd prompt 

    col1 = re.search(r'Server:.*', result, re.M|re.I)#use regex to extract data 
    col2 = re.search(r'Address: 8.8.8.8', result, re.M|re.I) 
    col3 = re.search(r'Name:.*', result, re.M|re.I) 
    col4 = re.search(r'Address: (?!8.8.8.8).*', result, re.M|re.I) 

    print col1.group() 
    print col2.group() 
    if (col3.group() != None): 
     print col3.group() # if none, skip 
    if (col4.group() != None): 
     print col4.group() # if none, skip 
+0

können Sie die Traceback zeigen? In welcher Zeile erhalten Sie den AttributeError? –

Antwort

1

statt dessen:

if (col3.group() != None): 
     print col3.group() # if none, skip 

tun Sie dies:

try col3.group(): 
     print col3.group() 
    except AttributeError: 
     pass 
1

Ein übliches Muster ist:

match = re.search(expression, string, flags) 
if match: # match would be None if there is no match 
    print(match.group()) 

In Ihrem Fall:

col1 = re.search(r'Server:.*', result, re.M|re.I) 
if col1: 
    print(col1.group()) 

Oder hier ist ein Beispiel, wie Sie eine Schleife über alle Spiele können und einen Standard festgelegt leerer Zeichenfolgenwert, wenn keine Übereinstimmung vorliegt:

By the way, hier ein verwandter Faden, wie die erfassten Gruppe in einem sicheren und kurzen Weg zu extrahieren:

1

Sie überprüfen müssen, wenn col3 und col4None sind, nicht die Gruppen :

if (col3 is not None): 
    print col3.group() 
if (col4.group() is not None): 
    print col4.group() 
Verwandte Themen