我在我的windows机器上运行了一个discord.py机器人,但我不能在Ubuntu上运行同样的机器人。我得到了一个"file not file error“,这是机器人中最早的错误之一:
storm = json.load(open(r'jsons\storms.json', 'r'))['wind']
但它确实存在。下面是回溯:
File "/root/bot/utility.py", line 6, in <module>
storm = json.load(open(r'jsons\storms.json', 'r'))['wind']
FileNotFoundError: [Errno 2] No such file or directory: 'jsons\\storms.json'这个机器人可以在我的Windows机器上运行,所以我假设Ubuntu或其他系统有一些不同,因为我已经将完整的机器人和所有文件复制到了Ubuntu系统上。
发布于 2020-08-04 21:03:28
您使用的是带有反斜杠\的硬编码Windows路由,在Unix/Linux中是斜杠/。
您可以使用os.path.sep访问正确的分隔符,它将在Windows上返回\,在其他地方返回/。
但可移植的方法是使用os.path的连接函数,如下所示:
import os
storms_path = os.path.join('jsons', 'storms.json')
storm = json.load(open(storms_path, 'r'))['wind']这将使用正确的分隔符格式化您的路径,并将避免构建自己的路径时可能遇到的许多陷阱。
发布于 2020-08-04 20:57:55
ubuntu使用'/'而不是'\'。因此,不是:
storm = json.load(open(r'jsons\storms.json', 'r'))['wind']使用:
storm = json.load(open(r'jsons/storms.json', 'r'))['wind']应该能行得通。
发布于 2020-08-04 21:20:16
与硬编码windows或linux样式的路径不同,您可能希望切换到使用python:https://docs.python.org/3/library/pathlib.html的pathlib标准库的更健壮的实现。
最小的示例如下所示:
from pathlib import Path
folder = Path("add/path/to/file/here/")
path_to_file = folder / "some_random_file.xyz"
f = open(path_to_file)注意,一旦初始化了Path对象,您就可以很容易地使用/运算符来附加例如文件名。
在您的json文件示例中:
import json
from pathlib import Path
folder = Path("jsons/")
path_to_file = folder / "storms.json"
storm = json.load(open(path_to_file, 'r'))['wind']https://stackoverflow.com/questions/63247374
复制相似问题