【发布时间】:2011-09-07 21:04:10
【问题描述】:
目的是查看脚本上方目录中的 json 文件并加载它在该文件中找到的内容。这就是我所拥有的:
import os
import json
settings_file = '/home/me/foo/bar.txt'
root = os.path.dirname(os.path.dirname(os.path.abspath(settings_file))) # '/home/me'
target = os.path.join(root,'.extras.txt') # '/home/me/.extras.txt'
db_file= open(target)
databases = json.load(db_file) # works, returns object
databases2 = json.load(open(target)) # equivalent to above, also works
# try to condense code, lose pointless variables target and file
databases3 = json.load(open(os.path.join(root,'.extras.txt'))) # equivalent (I thought!) to above, doesn't work.
那么...为什么一次性无保持变量版本不起作用?哦,返回的错误是(现在是完整的):
$ ./json_test.py
Traceback (most recent call last):
File "./json_test.py", line 69, in <module>
databases = json.load(open(os.path.join(root,'/.extras.txt')))
IOError: [Errno 2] No such file or directory: '/.extras.txt'
为了满足 S.Lott 善意的建议……target 设置为什么并不重要。数据库和数据库 2 正确填充,而数据库 3 不正确。 target 存在,可读并包含 json 期望看到的内容。我怀疑将命令串在一起的性质有一些我不明白的地方......我可以使代码工作,只是想知道为什么简洁(或复杂?)版本失败了。
【问题讨论】:
-
你确定root是正确的,错误提示它是/或'',而你的代码给出了其他东西
-
@Wounder:请 (1) 更新问题。切勿将 cmets 添加到您拥有的问题中。 (2) 使用
target的值更新工作和非工作示例。请创建一个非常非常清晰的日志。很难从问题中找出问题所在。 -
代码乍一看还不错,如果您提供一个完全失败的交互式 python 会话可能会有所帮助。
-
显然您正在尝试打开
/.extras.txt而不是/home/me/.extras.txt,尽管您可能相信。蟒蛇没有撒谎…… -
“数据库和数据库 2 正确填充,而数据库 3 正确填充”。如果没有详细、完整、易于查看的日志来显示有效的代码和变量值,以及不使用变量值的代码,我们就不容易理解。由于您的错误消息显示了至少 69 行代码(您的 sn-p 没有这些代码),因此我们得出一个结论。实际代码不 像 sn-p。请证明 sn-p 不起作用。