运行argv Python代码时出现TypeError

时间:2017-07-19 09:47:01

标签: python python-3.x python-3.6

from sys import argv

script, user_name = argv
prompt = '> '

print ("Hi %s, I'm the %s script.") % (user_name, script)
print ("I'd like to ask you a few questions.")
print ("Do you like me %s?") % user_name
likes = raw_input(prompt)

print ("Where do you live %s?") % (user_name)
lives = raw_input(prompt)

print ("What kind of computer do you have?")
computer = raw_input(prompt)

print """
Alright, so you said %r about liking me.
You live in %r. Not sure where that is.
And you have a %r computer. Nice.
""" % (likes, lives, computer)

在PowerShell中运行这个(Python 3)代码时我得到了

  

为%:' Nonetype'输入错误'不支持的操作数类型和' str'

这里有什么错误?

1 个答案:

答案 0 :(得分:2)

print ("Hi %s, I'm the %s script.") % (user_name, script)

print是Python 3中的一个函数,所以这与你期望的不同。第一组括号属于print函数调用,所以你拥有的是:

print("Hi %s, I'm the %s script.")  %  (user_name, script)
#    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    
# only that is the argument to the print call

因此,如果您在单独的语句中将其拆分,它将如下所示:

print_result = print("Hi %s, I'm the %s script.")
format_args = (user_name, script)

print_result % format_args

现在,调用print()不会返回任何内容,即None。所以你基本上做了以下事情:

None % format_args

这会导致您看到的确切错误。

您要做的是确保为传递给print调用的参数发生字符串格式化,如下所示:

print("Hi %s, I'm the %s script." % (user_name, script))

请注意,您不需要在其他括号中添加字符串。因此,print调用只有一个左括号,最后会关闭。

正如Paul Rooney在评论中指出的那样,一旦你修复了print次来电,你可能会遇到使用NameError的{​​{1}}。 Python 3中不存在raw_input,因此您也需要修复它。另请参阅this question on that topic