python脚本出错(编程很新!)

时间:2016-05-05 06:42:17

标签: python

完全披露,我对编程完全陌生,所以我提前道歉。我正在研究这个python脚本,它将获得用户输入并在某些OS命令中使用该输入(ping,traceroute,whois)。它不完整,但这是脚本:

#!/usr/bin/python

from os import system

def pingz():

    system('ping -c 5 %(ab)s' % locals())

def trace_route():

    system('traceroute %(cd)s' % locals())

print("My Web Utility:")

print("____________________\n")

print(" 1)Ping a website/IP Address.\n")

print(" 2)Trace the route to a website/IP Address.\n")

print(" 3)Whois inforation.\n")

choice = raw_input("What would you like to do? \n")

if choice == '1':

    ab = raw_input("Please enter the Domain Name/IP Address:\n")

    pingz()

elif choice == '2':

    cd = raw_input("Please enter the Domain Name/IP Address:\n")

    trace_route() 

我在每个“选择”上都遇到两个错误。所以例如,如果我输入1,我会得到一个提示,询问域名/ IP地址,当我输入它时,我得到的错误是:

Traceback (most recent call last):
File "./test2.py", line 19, in <module>
pingz()
File "./test2.py", line 6, in pingz
system('ping -c 5 %(ab)s' % locals())
KeyError: 'ab'

非常类似的错误选择2.我是如何调用函数的?有人能指出我正确的方向吗?我已经尝试过这个脚本的较小实现(没有自己的功能),没有其他/ elif语句,它工作正常...对不起,很长的帖子,并提前感谢!

2 个答案:

答案 0 :(得分:2)

locals是指当前帧,其中未定义ab。它位于globals()

你可以像这样访问它:

def pingz():
    system('ping -c 5 %(ab)s' % globals())

答案 1 :(得分:1)

函数中没有任何局部变量,因此locals()是一个空字典,因此它会引发KeyError

您应该简单地将变量传递给函数,而不是依赖于locals()(或globals()):

def pingz(host):
    system('ping -c 5 %s' % host)

.
.
.

ab = raw_input("Please enter the Domain Name/IP Address:\n")

pingz(ab)

与使用locals()globals()相比,该方法更为可取。 它更易读,更清晰,更不容易出错,特别是如果您计划在函数内修改可变对象。

此外,由于globalslocals都是必需的字典,它们会强制您使用唯一的变量名称,并且没有理由说2个函数应该具有其局部变量的唯一名称(例如你的ping和traceroute函数都应该有一个名为host)的变量。