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'
这里有什么错误?
答案 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。