2017-07-07 2 views
1

Ich habe eine Funktion den Wert 1 zurück Liste zu einem Zeitpunkt, wie untenIgnorieren nicht vorhandene Attribute in der Konfigurationsdatei Parser Python

['7:49', 'Section1', '181', '1578', '634', '4055'] 
['7:49', 'Section2', '181', '1578', '634', '4055'] 

Diese Werte sind time,section,count,avg,min,max (Ich weiß, das wird immer die Folge sein) Mein Ziel ist Alarmieren, wenn einer der Werte Grenzwerte verletzt, die in einer Konfigurationsdatei definiert sind.

So erstelle ich eine Config wie unten

[Section1] 
Count:10 
Min:20 
Max:100 
Avg:50 
[Section2] 
Count:10 
Min:20 
Max:100 
Avg:50 

Meine Funktion max und min Grenzen

def checklimit(line): 
    print "Inside CheckLimit", line[1],line[4],line[5] 
    if line[4] < ConfigSectionMap(line[1])['min'] or line[5] > ConfigSectionMap(line[1])['max']: 
     sendAlert(line) 

Dies funktioniert gut, um zu überprüfen, aber das verbessert werden könnte und einige Sonderfälle hat. Angenommen, jemand verlässt Config wie unten

[Section1] 
Count:10 
Min: 
Max: 
Avg:50 
[Section2] 
Count:10 
Avg:50 

Bedeutung der Benutzer nur für den Grafen und Avg überprüfen möchte. Wie sollten diese Fälle in meinem Code behandelt werden, um nur die erforderlichen Parameter in der Konfigurationsdatei zu überprüfen. Ich habe verwendet Config Parser von here

Vorschläge zur Frage Titel Verbesserung sind willkommen. Es war schwer, einen zu setzen. Danke

Antwort

1

Es gibt viele Möglichkeiten, dies zu erreichen. Bei Schlüsselwortsuchen können Sie in Wörterbüchern die Methode dict.get() verwenden und einen Rückfallwert bereitstellen.

so statt

ConfigSectionMap(line[1])['min'] 

Sie so etwas wie dieses verwenden, die 0 zurück, wenn der Schlüssel nicht existiert.

ConfigSectionMap(line[1]).get('min', 0) 
+0

Danke, würde ich etwas ideal gern, die die Bedingung immer wahr machen (es könnte Fall sein, wo unser Standardwert von 0 nicht sicher, minimal ist). z.B. Wenn min nicht in config angegeben ist (was bedeutet, dass der Benutzer seinen Wert nicht stört) und wir setzen ihn auf 0, aber die Zeile [4] sagt -20, würde dies zu falscher Warnung führen! – pythonRcpp

+0

@pythonRcpp Sie können 'float ('- inf')' anstelle von 0 dann verwenden. –

+0

@Rawing Ich benutzte die 'Klasse AlwaysTrue: def __gt __ (selbst, andere): zurück True def __lt __ (selbst, andere): Rückgabe True' als Standardwert, ist das nicht eine bessere Möglichkeit, dies zu tun? – pythonRcpp