每個人。Python。 NameError:全局名稱未定義(功能無類)
我的Python腳本有問題。這裏有一個問題代碼(有「打印」行只是爲了檢查變量的值):
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 ...
如果我試圖運行該腳本,我得到這樣的輸出:
>
<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
如果使用「print」命令,那麼處理變量就沒有問題。但是當我試圖從字符串中只獲取特定的字符時,我得到錯誤。
我不明白爲什麼會發生。如果這是Python的正常行爲,那麼如何從行中獲取字符(例如,通過附加變量)?我知道的唯一方法是使用「[]」。
PS沒有區別,如果我會嘗試:
CheckResault = checkForHittingLevel(some_name, 20, 'some_name>10;name_2<10')
UPDATE:編輯的代碼,因爲有一些變量名的問題。 Screenshot
UPDATE2:在我的第一個例子中,我只用了函數的一部分以及它應該如何調用。我自己檢查了這個例子,它的工作原理。但是在完整的代碼中卻沒有。所以我在調用這個函數的那部分代碼中加入了上面的信息。
你認爲'actionWithLevel'的定義在哪裏?它沒有在你當前的代碼中定義。 'actionAndlevel','actionWithlevel'和'actionWithLevel'是不同的變量名稱,如果這讓你感到困惑。 – miradulo
只是爲了澄清:'actionWithLevel'和'actionWithlevel'(注意'l')也是不同的名字。 –
只是一個提示:'match = True如果curValue> actionAndLevel [1:]否則False'可以寫成match = curValue> actionAndLevel [1:]'。請尊重[Python代碼樣式指南](https://www.python.org/dev/peps/pep-0008/)並使用4個空格進行縮進。 – Matthias