我有这段代码。
#!/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的初学者。
答案 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错误。