小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
3.2.1章节 import requests报错:未存取“requests”Pylance
-
更能包构建后运行:
ltb@ltb-B560M-DS3H-AC:~/chapt3/topic_ws$ colcon build Starting >>> demo_python_topic Finished <<< demo_python_topic [0.58s] Summary: 1 package finished [0.76s] ltb@ltb-B560M-DS3H-AC:~/chapt3/topic_ws$ source install/setup.bash ltb@ltb-B560M-DS3H-AC:~/chapt3/topic_ws$ ros2 run demo_python_topic novel_pub_node [INFO] [1730125065.332248754] [novel_node]: novel_node,启动! Traceback (most recent call last): File "/home/ltb/chapt3/topic_ws/install/demo_python_topic/lib/demo_python_topic/novel_pub_node", line 33, in <module> sys.exit(load_entry_point('demo-python-topic==0.0.0', 'console_scripts', 'novel_pub_node')()) File "/home/ltb/chapt3/topic_ws/install/demo_python_topic/lib/python3.10/site-packages/demo_python_topic/novel_pub_node.py", line 20, in main node.download('http://0.0.0.0:8000/novel1.txt') File "/home/ltb/chapt3/topic_ws/install/demo_python_topic/lib/python3.10/site-packages/demo_python_topic/novel_pub_node.py", line 11, in download requests = requests.get(url) UnboundLocalError: local variable 'requests' referenced before assignment [ros2run]: Process exited with failure 1
requests已安装:
ltb@ltb-B560M-DS3H-AC:~$ pip show requests Name: requests Version: 2.32.3 Summary: Python HTTP for Humans. Home-page: https://requests.readthedocs.io Author: Kenneth Reitz Author-email: me@kennethreitz.org License: Apache-2.0 Location: /home/ltb/.local/lib/python3.10/site-packages Requires: certifi, charset-normalizer, idna, urllib3 Required-by: jupyterlab_server ltb@ltb-B560M-DS3H-AC:~$ sudo apt install python3-requests [sudo] ltb 的密码: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 python3-requests 已经是最新版 (2.25.1+dfsg-2ubuntu0.1)。 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 26 个软件包未被升级。
插件Pylance也重新安装了几次,vscode缓存也清理了,都不行
-
错误提示表明在你的 Python 脚本中,
requests
这个局部变量在使用之前被引用,但实际上你应该是想使用已经安装的requests
模块。问题在于你的代码中对requests
模块的引用方式不正确。在你的脚本
novel_pub_node.py
中,你有一行代码是这样的:requests = requests.get(url)
这行代码错误地将
requests
这个模块名重新赋值为一个requests.get(url)
的结果,这是一个 HTTP 响应对象,而不是模块本身。因此,当你尝试调用requests.get(url)
时,由于requests
已经被重新赋值为一个响应对象,所以它会抛出一个UnboundLocalError
,因为局部变量requests
在赋值前就被引用了。为了解决这个问题,你应该在脚本的顶部导入
requests
模块,并且在调用get
方法时使用这个模块名,而不是覆盖它。下面是修改后的代码示例:import requests # 确保在文件顶部导入 def download(url): response = requests.get(url) # 使用 requests 模块,并将结果赋值给 response # 接下来处理 response,例如读取内容等 return response.text # 示例:返回响应的文本内容
确保你的
novel_pub_node.py
文件中类似地使用了requests
模块,而不是错误地重新赋值。另外,由于你已经确认
requests
模块已经通过pip
安装在你的系统中,并且位于/home/ltb/.local/lib/python3.10/site-packages
,你需要确保你的 Python 环境(特别是 ROS2 环境)配置正确,以便它能够找到这个模块。从错误信息来看,你的 ROS2 环境似乎已经正确设置了,因为它能够找到你的novel_pub_node.py
脚本。最后,重新构建你的 ROS2 项目并再次运行,看看问题是否解决:
cd ~/chapt3/topic_ws colcon build source install/setup.bash ros2 run demo_python_topic novel_pub_node
以上为生成回答,仅供参考~
-
@43996173 看下代码
-
@小鱼 好了小鱼老师,代码抄错了
-
@43996173 ok