代码说它是错误类型但是

时间:2014-09-02 17:29:54

标签: python python-2.7

我有这段代码。

#!/usr/bin/python

from optparse import OptionParser   #import the OptionParser object from this module

parser = OptionParser()

parser.add_option("-f", "--first", dest="meal", help="prix repas", type="float")  
parser.add_option("-s", "--second", dest="tip", help="le tip", type="float")
parser.add_option("-t", "--third", dest="tax", help="tax", type="float")


(options, args) = parser.parse_args() 

tax_value = options.meal * options.tax
meal_with_tax = tax_value + options.meal
tip_value = meal_with_tax * tip

if not (options.meal and options.tip): 
parser.error("You need to supply an argument for -s")

print "le prix du repas est '{}'.".format(options.meal)
print "Le tip est de '{}'.".format(options.tip)
print "Le tip est de '{}'.".format(options.tip)

每次我使用以下命令行运行它

./tip_re1_arg.py -s 5 2 3

我收到此错误tax_value = options.meal * options.tax TypeError: unsupported operand type(s) for *: 'NoneType' and 'NoneType'

为什么呢?似乎我在类型方面做了一切正确的事情。还是我?

抱歉,我是Python的初学者。

2 个答案:

答案 0 :(得分:3)

您已明确配置解析器以将参数作为选项:

./tip_re1_arg.py -f 5 -s 2 -t 3

./tip_re1_arg.py --first 5 --second 2 --third 3

目前,您的输入参数最终位于args

答案 1 :(得分:0)

您需要在运行时指定选项。换句话说:

./tip_re1_arg.py -f 5 -s 2 -t 3

解析器不仅会获取3个未声明的选项并分配它们。现在,您可以通过直接使用输入参数数组(使用sys.argv [1]等)来使用它们而不使用标记。这可能不如用户友好,而是将你的论点改为实际意义(即-m / - meal,-x / - tax,-t / - tip)。

无论如何,您调用它的方式,膳食和税收实际上并未分配,因此为空,给您NoneType错误。