alle.Python. NameError: globaler Name ist nicht definiert (Funktion ohne Klasse)
Ich habe ein Problem mit meinem Python-Skript. Hier ist ein Problemcode (es gibt „print“ Linien nur für einen Wert von Variablen Prüfung):
def checkForHittingLevel(name, curValue, checkLine):
match = bool(False)
if checkLine is None:
return match
for parametersForCheck in checkLine.split(';'):
if name in parametersForCheck:
actionWithLevel = parametersForCheck.replace(name,'')
# Just to check that it's not empty or there is any problem:
print actionWithLevel[0]
print type(actionWithLevel)
if actionWithLevel[0] == '>':
match = True if curValue > actionWithLevel[1:] else False
break
elif actionWithLevel[0] == '<':
match = True if curValue < actionWithLevel[1:] else False
break
elif actionWithLevel[0] == '=':
match = True if curValue == actionWithLevel[1:] else False
break
elif actionWithLevel[0] == '!':
match = True if curValue != actionWithLevel[1:] else False
break
else:
match = False
break
return match
incArgs.add_argument('-c', '--critical-list', type=str, dest='criticals',
help='List of critical values for checking data')
inpValue = incArgs.parse_args()
[... some code here ...]
for checkLine in dNetCoreStatsOutData.splitlines():
checkStatName = str(checkLine.split()[0])
checkStatValue = int(checkLine.split()[1])
for checkPrevDataLine in oldData.splitlines():
if checkStatName in checkPrevDataLine:
prevValue = int(checkPrevDataLine.split()[1])
diffValue = checkStatValue - prevValue
if checkForHititngLevel(checkStatName, diffValue, inpValue.criticals):
... code here ...
Wenn ich versuche, um das Skript auszuführen, erhalte ich diese Ausgabe:
>
<type 'str'>
Traceback (most recent call last):
File "test.py", line ###, in <module>
if checkForHitingLevel(some_name, 20, 'some_name>10'):
File "test.py", line ###, in checkForHittingLevel
if actionWithlevel[0] == '>':
NameError: global name 'actionWithlevel' is not defined
Wenn der Befehl "print" verwendet wird, gibt es keine Probleme mit dem Umgang mit Variablen. Aber wenn ich versuche, nur bestimmte Zeichen von der Zeichenfolge zu bekommen, bekomme ich einen Fehler.
Ich kann nicht verstehen, warum es passiert. Und wenn es ein normales Verhalten der Python ist, wie kann ich dann Zeichen aus der Zeile bekommen (zum Beispiel über zusätzliche Variable)? Der einzige Weg, den ich kenne, ist "[]" zu verwenden.
PS Es gibt keinen Unterschied, ob ich versuchen werde:
CheckResault = checkForHittingLevel(some_name, 20, 'some_name>10;name_2<10')
UPDATE: bearbeitet Code, weil es ein Problem mit einigen Variablennamen war. Screenshot
UPDATE2: In meinem ersten Beispiel habe ich nur Teil mit Funktion und wie es aufgerufen werden soll. Ich habe dieses Beispiel selbst überprüft und es funktioniert. Aber innerhalb des vollständigen Codes tut es das nicht. Also fügte ich zu den Informationen oberhalb den Teil des Codes hinzu, der diese Funktion aufruft.
Wo denken Sie, dass "actionWithLevel" definiert ist? Es ist nicht in Ihrem aktuellen Code definiert. 'actionAndlevel',' actionWithlevel' und 'actionWithLevel' sind unterschiedliche Variablennamen, falls Sie dadurch verwirrt werden. – miradulo
Nur um klarzustellen: 'actionWithLevel' und' actionWithlevel' (beachten Sie das 'l') sind auch unterschiedliche Namen. –
Nur ein Hinweis: 'match = True wenn curValue> actionAndLevel [1:] else False' kann als 'match = curValue> actionAndLevel [1:]' geschrieben werden. Bitte beachten Sie den [Style Guide for Python Code] (https://www.python.org/dev/peps/pep-0008/) und verwenden Sie 4 Leerzeichen zum Einrücken. – Matthias