首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python脚本中的错误(对编程非常陌生!)

问python脚本中的错误(对编程非常陌生!)
EN

Stack Overflow用户
提问于 2016-05-05 14:42:17
回答 2查看 112关注 0票数 2

完全公开,我完全是编程新手,所以我提前道歉。我正在编写这个python脚本,它将获取用户输入,并在某些操作系统命令(ping、traceroute、whois)中使用该输入。它并不完整,但下面是脚本:

代码语言:javascript
复制
#!/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地址的提示,当我输入域名/ip地址时,我得到的错误是:

代码语言:javascript
复制
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也有类似的错误,是不是我调用函数的方式有问题?有谁能告诉我怎么走吗?我已经尝试了这个脚本的较小的实现(没有创建我自己的函数),没有else/elif语句,它工作得很好……很抱歉发了这么长的帖子,提前谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-05-05 14:48:54

局部变量指的是当前帧,当前帧中没有定义ab。它就在你的globals()里

您可以这样访问它:

代码语言:javascript
复制
def pingz():
    system('ping -c 5 %(ab)s' % globals())
票数 2
EN

Stack Overflow用户

发布于 2016-05-05 14:50:34

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

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

代码语言:javascript
复制
def pingz(host):
    system('ping -c 5 %s' % host)

.
.
.

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

pingz(ab)

与使用locals()或globals()相比,该方法更可取。它更易读,更清晰,更不容易出错,特别是当你计划在函数中修改可变对象的时候。

此外,由于globals和locals本质上都是字典,它们强制您使用唯一的变量名称,并且没有理由让两个函数的本地变量具有唯一的名称(例如,您的ping和traceroute函数都应该有一个名为host的变量)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37044092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档