Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:应为字符串或缓冲区_Python_Json_Python 2.7 - Fatal编程技术网

Python TypeError:应为字符串或缓冲区

Python TypeError:应为字符串或缓冲区,python,json,python-2.7,Python,Json,Python 2.7,我需要帮助。 具有名为arglist的数据列表,例如: ['dlink','des','1210','c',24]您试图加载一个文件对象,而json.loads需要一个字符串。你可以用 z = json.loads(open("test", "r").read()) 或者更好: with open("test") as f: z = json.load(f) 在第一个示例中,文件是打开的,但从未关闭(错误做法)。在第二个示例中,上下文管理器在离开上下文块后关闭文件。您试图加载的是文件

我需要帮助。 具有名为arglist的数据列表,例如:
['dlink','des','1210','c',24]您试图加载一个文件对象,而json.loads需要一个字符串。你可以用

z = json.loads(open("test", "r").read())
或者更好:

with open("test") as f:
    z = json.load(f)

在第一个示例中,文件是打开的,但从未关闭(错误做法)。在第二个示例中,上下文管理器在离开上下文块后关闭文件。

您试图
加载的是文件对象,而不是字符串。如果您想处理文件而不是字符串,您应该只使用
json.load
json.dump
。调试的第一条规则是假设错误告诉您的是事实真相。它期待一个字符串,但你没有给它一个。因此,从为什么要传递非字符串的内容,或者为什么要使用需要字符串的函数开始调查。你说得对。太明显了。谢谢您的帮助。
.read()
在这里很重要。
open
内置函数返回一个文件对象,而不是字符串。为了澄清这一点,json.load(open(…).read()可以工作,json.load(open(…)也可以工作<使用
s
加载
需要一个字符串,而不使用
s
加载则需要一个文件
.read()
将文件转换为字符串。
z = json.loads(open("test", "r").read())
with open("test") as f:
    z = json.load(f)