Python function name … is not defined
我在做一些python web内容请求,我想在代码中做一些函数,但是有一个错误,我不知道为什么会出现这个错误。我的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def tempRequest(tree, heading):
page = requests.get("http://10.0.0.3/admin/speedtest.php")
tree = html.fromstring(page.content)
heading = tree.xpath('//a[@id="temperature"]/text()')
return heading, tree
tempRequest(tree, heading)
heading = tree.xpath('//a[@id="temperature"]/text()')
sheet = client.open("Database").sheet1
sheet.insert_row(heading, 10)
time.sleep(5) |
tempRequest(tree, heading) NameError: name 'tree' is not defined
你们能帮帮我吗?谢谢。
- 型因为,在调用(缩进不良)函数时,全局范围内没有要传递给该函数的tree。调用函数之前,如果tempRequest(tree, heading)中不存在tree,如何传递该函数?即使不知道python的作用域,这也是不合逻辑的。
- 型所以我应该这样说:page = requests.get("http://10.0.0.3/admin/speedtest.php")tree = html.fromstring(page.content)heading = tree.xpath('//a[@id="temperature"]/text()')tempRequest(tree, heading)。
- 型将值传递给调用,该调用绑定到函数内的参数名。如文所述,tempRequest不需要任何论据。
- 型@Petrjel&237;nek我认为你正朝着正确的答案前进,但请将其编辑为原始问题,这样我们就可以看到你的目标。
- 型@罗甘霍什,是我……但是,我仍然需要在函数和全局范围内定义页面、树和标题。
- 型您实际上没有。编辑得很好,但是Ruohola的回答显示了在调用函数之前,这些名称都不需要定义。您不必初始化任何变量并进入鸡或蛋的情况,让函数返回值以在全局范围内定义它们。
- 型@Roganjosh我不知道为什么,但我的代码仍然不起作用,即使是Ruohola编辑的代码。让我给你看我的代码截图,它会更好:snag.gy/fzgypn.jpg
- 型你把值解包的方式不对。函数返回tree,heading,但您正在解包到heading,tree中。函数正在返回一个元组,您正在切换名称
- 型@Petrjel&237;nek请不要发布代码图像(尤其是没有行号!)。但是在代码中,您三次调用tempRequest()函数。一次是以错误的顺序获取返回值,一次是不使用返回值,一次是不使用返回值并传递不使用的参数。
- 型这些都是非常基本的错误,我建议你学习一些教程。
- 型@我支持我对你的回答的评论。OP的实现在这里是不正确的(另见我以前的评论),但我们至少可以解决这一个误解。
- 型@罗根霍斯,好吧,我想我找到了方法。所以,请让我做一个简要回顾,并告诉我是否我错了。首先,我必须定义一个没有任何位置参数的函数,在这个函数中,我定义了tpage、tree和heading,但只返回tree和heading down,在这里我将它们设置为函数。如果我需要在代码中再次使用这个函数,我根本不需要传递任何参数,这就是它的工作原理,但我不确定为什么以及如何到达那里。
- 型是的,如果定义一个不带参数的函数,也就是说,def function_name():,就永远不能给它提供任何参数。所以你总是把它叫做function_name(),而不是function_name(variable1, variable2)。
- 型@Petrjel&237;nek看起来基本上是正确的,但我怀疑在你的理解中到处都有漏洞。你需要做一些关于"python scope"、"python函数scope"等的研究,不管你需要什么资源来解决这个问题。我们在这里盖太多了
- 型我回滚了你的编辑。你编辑的代码不能给你以前的错误。确保你的问题有一个最小的、完整的、可验证的例子,并且不要用编辑使现有答案无效。
- 型@Roganjosh是的,我同意你的看法,我是Python的新手,我不是很有经验的程序员,所以我会做一些研究,不管怎样,谢谢你的时间。:)
- 型@Petrjel&237;nek这是一项重要的研究,我不知道这些天你要指出什么,因为我学到的一些旧的联系已经消失了。但关键词绝对是"范围",我祝你好运。快乐编码:)
您的代码中有一些基本错误,应该是这样的:
1 2 3 4 5 6 7 8 9 10 11
| def tempRequest():
page = requests.get("http://10.0.0.3/admin/speedtest.php")
tree = html.fromstring(page.content)
heading = tree.xpath('//a[@id="temperature"]/text()')
return heading, tree
heading, tree = tempRequest()
sheet = client.open("Database").sheet1
sheet.insert_row(heading, 10)
time.sleep(5) |
在原始代码中,您试图在代码中定义变量之前将变量传递给函数。你根本不用函数返回值。