如果这种方法错了,那么为什么口译员将其排除一半?

时间:2015-06-10 21:25:11

标签: python python-2.7

我是编程的绝对初学者,我正在做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"

3 个答案:

答案 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 函数的签名(这会给参数提供错误的名称)。