我是编程的绝对初学者,我正在做zed shaw&#python艰难的方式。我玩的功能比我做的更多
movies(mov1 = raw_input("first movie "), mov2 = raw_input("second movie "))
现在有趣的是,函数确实要求我输入,所以raw_input
正在运行。但在此之后它会显示
TypeError:movies() got an unexpected keyword argument 'mov1'
我的问题是:如果这在语法上是错误的,那么为什么要开始执行以及为什么不会出现语法错误?
我的功能定义是:
def movies(sci_fi, thriller):
print "So you like %r movie!!" %sci_fi
print "So you like %r movie!!" %thriller
print "Man those movies were awesome!!"
print "Now movie is finished..."
print "Get back to work. \n"
答案 0 :(得分:4)
您没有语法错误。您有运行时错误。
Python是一种高度动态的语言。由于函数是对象,其他代码可以在程序运行期间随时替换您的函数,因此在调用函数之前,Python不会知道,你是传递函数不支持的关键字参数。
如果你这样做了:
old_movies = movies
def movies(mov1, mov2):
return old_movies(mov1, mov2)
程序中的其他位置然后使用
movies(mov1 = raw_input("first movie "), mov2 = raw_input("second movie "))
你的计划会成功。
答案 1 :(得分:1)
这不是一个合成错误。它是一个“运行时”错误。您的movies
方法确实需要两个参数。它只会在调用movies方法时发现你的参数错误并提供了一个名为mov1
(或mov2
)的参数
答案 2 :(得分:1)
raw_input 在电影的调用之前运行。 Python是一种解释型语言,因此不会根据您的调用检查 movies 函数的签名(这会给参数提供错误的名称)。