AttributeError:'命名空间'对象没有属性'检查'

时间:2016-05-09 22:39:34

标签: python

我试图在命令行上运行一个带有不同参数的python脚本。有一个位置参数(num),其他是可选参数。我尝试运行[python newping.py 10 -c],但得到以下错误。是否有任何我无法弄清楚的错误?

import argparse

def fibo(num):
 a,b = 0,1
 for i in range(num):
    a,b=b,a+b;
 return a;

def Main():
 parser = argparse.ArgumentParser(description="To the find the fibonacci number of the give number")
 arg1 = parser.add_argument("num",help="The fibnocacci number to calculate:", type=int)
 arg2 = parser.add_argument("-p", "--password", dest="password",action="store_true", help="current appliance password. Between 8 and 15 characters, lower case, upper case and numbers")
 arg3 = parser.add_argument("-i", "--ignore",help="ignore the args",action="store_true", dest="ignore")
 arg4 = parser.add_argument("-c", "--check", help="performance metrics",action="store_true", dest="performance")
 arg5 = parser.add_argument("-m", "--node/model",dest="Node_Model",help="Type of the Model",action="store_true")
 parser.add_argument("-pf", "--permfile", help="increase output verbosity",action="store_true")
 args = parser.parse_args()

 result = fibo(args.num)
 print("The "+str(args.num)+"th fibonacci number is "+str(result))

 if args.permfile:

        for x in range(1,len(vars(args))):
            value = locals()["arg"+str(x)]
            print(value.dest+ " "+ value.help)

 if args.password:
    print("I am asking for the password")

 if args.ignore:
    print("This is to ignore the command")

 if args.check:
    print("Check the performance of the server")


 if __name__ == '__main__':
    Main()


 Output :
 The 10th fibonacci number is 55
 Traceback (most recent call last):
 File "newping.py", line 41, in <module>
  Main()
 File "newping.py", line 36, in Main
   if args.check:
   AttributeError: 'Namespace' object has no attribute 'check'

1 个答案:

答案 0 :(得分:17)

创建参数时

arg4 = parser.add_argument("-c", "--check", help="performance metrics",
    action="store_true", dest="performance")

dest参数告诉argparse使用名为performance的变量,而不是check。将您的代码更改为:

if args.performance:
    print("Check the performance of the server")

或删除dest参数。

Python样式指南建议您将行限制为80个字符,这在发布到SO时很有用,这样我们就不必滚动查看代码了。