如何解决我可以“打印args.username,但我不能使用 args.username 作为搜索值?
我一直在尝试调试我的程序。我通过 argparse 接受用户名的参数,并希望使用 args.username 值来搜索 passwd 文件。我收到以下错误:NameError: name 'args' is not defined。我可以打印(args.username),但我不能在搜索中使用 args.username。
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()
您提到您可以在 print(args.username)
中执行 main()
就好了,这似乎只有在您删除搜索代码时才有可能,因为搜索代码会在 main()
之前出错甚至在您显示的代码中运行。所以我认为你的例子不是打印工作的代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。