试图弄清楚为什么我会因为没有声明变量而收到此错误。
这很好用:
def findLargestIP():
for i in tagList:
#remove all the spacing in the tags
ec2Tags = i.strip()
#seperate any multiple tags
ec2SingleTag = ec2Tags.split(',')
#find the last octect of the ip address
fullIPTag = ec2SingleTag[1].split('.')
#remove the CIDR from ip to get the last octect
lastIPsTag = fullIPTag[3].split('/')
lastOctect = lastIPsTag[0]
ipList.append(lastOctect)
largestIP = int(ipList[0])
for latestIP in ipList:
if int(latestIP) > largestIP:
largestIP = latestIP
# return largestIP
print largestIP
在数字标签列表中,最大的#是16,它输出:
python botoGetTags.py
16
但是上面只打印出我需要传递给另一个函数的变量但是当我修改上面的代码时
return largestIP
# print largestIP
并调用函数:
return largestIP
#print largestIP
findLargestIP()
print largestIP
我收到此错误:
python botoGetTags.py
Traceback (most recent call last):
File "botoGetTags.py", line 43, in <module>
print largestIP
NameError: name 'largestIP' is not defined
我的猜测是我必须在全局中初始化变量..但是当我通过使maximumIP = 0来执行此操作时,它返回0而不是函数中的值
谢谢!
答案 0 :(得分:4)
当函数返回一个值时,必须将其赋值给要保留的值。函数内部定义的变量(如下例中的b
)仅存在于函数内部,不能在函数外部使用。
def test(a):
b=a+1
return b
test(2) # Returns 3 but nothing happens
print b # b was not defined outside function scope, so error
# Proper way is as follows
result=test(2) # Assigns the result of test (3) to result
print(result) # Prints the value of result
答案 1 :(得分:1)
这是因为largestIP
仅存在于findLargestIP
函数的范围内。
由于此函数返回一个值,但您只是在不指定新变量的情况下调用它,之后该值会“丢失”。
你应该尝试类似的东西:
def findLargestIP():
# ...
return largestIP
myIP = findLargestIP() # myIP takes the value returned by the function
print myIP