Python “我可以”;打印(args.username),但我可以';是否使用args.username作为搜索值?
我一直在试着调试我的程序。我通过argparse接受用户名参数,并希望使用args.username值搜索passwd文件。我收到以下错误:名称错误:未定义名称“args”。我可以打印(args.username),但不能在搜索中使用args.usernamePython “我可以”;打印(args.username),但我可以';是否使用args.username作为搜索值?,python,argparse,Python,Argparse,我一直在试着调试我的程序。我通过argparse接受用户名参数,并希望使用args.username值搜索passwd文件。我收到以下错误:名称错误:未定义名称“args”。我可以打印(args.username),但不能在搜索中使用args.username import argparse # My argparse section def main(): # initialize the parser parser = argparse.ArgumentParser(de
import argparse
# My argparse section
def main():
# initialize the parser
parser = argparse.ArgumentParser(description="my argparse script")
# add the parameters positional/optional
parser.add_argument('-u', '--username', nargs='+', help="Enter user name to search passwd file with", type=str)
# parse the arguments
args = parser.parse_args()
# This print statement works fine
print(args.username)
print(args)
# My search the passwd file section
# The statement below, user=args.username is causing the error
user = args.username
with open("passwd") as file:
for line in file:
if line.split(":")[0] == user:
print("User found : " + line.split(":")[0])
else:
print("User not found : " + line.split(":")[0])
if __name__ == '__main__':
main()
args
在main()
的范围内。而且,main()
在您的搜索代码之后运行,因为您的搜索代码在任何函数之外。由于您的搜索超出了main
的范围,因此无法访问args
。您可以取消缩进搜索,使其在范围内,允许您使用args
。这将产生在main()
末尾而不是之前运行搜索的效果,因此不仅将定义args
,而且还将在范围内:
import argparse
# My argparse section
def main():
# initialize the parser
parser = argparse.ArgumentParser(description="my argparse script")
# add the parameters positional/optional
parser.add_argument('-u', '--username', nargs='+', help="Enter user name to search passwd file with", type=str)
# parse the arguments
args = parser.parse_args()
# This print statement works fine
print(args.username)
print(args)
# My search the passwd file section
# The statement below, user=args.username is causing the error
user = args.username
with open("passwd") as file:
for line in file:
if line.split(":")[0] == user:
print("User found : " + line.split(":")[0])
else:
print("User not found : " + line.split(":")[0])
if __name__ == '__main__':
main()
您提到可以在
main()
中执行print(args.username)
,这似乎只有在删除搜索代码时才可能,因为搜索代码会在main()
之前出错,甚至在您显示的代码中运行。因此,我认为您的示例不是打印工作的代码。args
仅存在于main()
方法中。另外,在您有user=args.username
行的地方,您甚至还没有运行main()
方法。@RocketHazmat:令人困惑的是,他们不应该在main
中看到打印
“工作正常”,因为在调用它之前,他们会在异常情况下死亡。所以这不是一个能证明所声称的行为的例子。@ShadowRanger哇,我甚至没注意到。我只是注意到代码超出了方法的范围,并假设这就是问题所在,但没有充分考虑它。谢谢大家的评论。我忘了注意user=“David”工作正常,但user=args.username是导致错误的原因。从你所有的评论和建议中,我能够克服这个错误。谢谢关于这个话题的最后一个问题。我不再得到错误,但是当我将参数-u=root传递给args.username并将其与passwd文件进行比较时,我没有得到匹配。我打开了passwd文件,有一个名为root的用户。如果我硬编码user=“root”而不是通过args.username传递值,效果很好。@zeusbella通常建议您就任何单独的问题提出新问题。不过,我会先尝试一些简单的调试;args.username
是否具有您期望的准确长度?比如,你确定没有空格之类的吗?当你打印出来的时候,你看到了你期望的价值?