Python 3.x 类型错误:不可损坏的类型:';dict';,将内联for循环输出写入JSON文件时
我试图制作一个程序,根据用户的输入生成一个JSON文件 JSON文件将用于创建一个python文件,其中包含一个使用JSON文件生成的类(此处未显示) 提交输入后,您可以选择是否要在JSON对象中创建新实例。提交“Y/Y”时,可以创建新实例。之后,如果您提交“N/N”,我会得到错误Python 3.x 类型错误:不可损坏的类型:';dict';,将内联for循环输出写入JSON文件时,python-3.x,class,dictionary,code-generation,Python 3.x,Class,Dictionary,Code Generation,我试图制作一个程序,根据用户的输入生成一个JSON文件 JSON文件将用于创建一个python文件,其中包含一个使用JSON文件生成的类(此处未显示) 提交输入后,您可以选择是否要在JSON对象中创建新实例。提交“Y/Y”时,可以创建新实例。之后,如果您提交“N/N”,我会得到错误 import json class GenerateSchema: rounds = 0 # This list stores instances = [] while True:
import json
class GenerateSchema:
rounds = 0
# This list stores
instances = []
while True:
if len(instances) == 0:
schema_filename = input("*.json filename: ")
class_name = input("ClassName: ")
instance_name = input("First instance name: ")
instance_params = input("Instance parameter(s) ENTER for 'self' only: ")
instance_description = input("Instance description (OPTIONAL): ")
keep_generating = input("Generate another instance? [Y/N]: ")
if keep_generating == "Y" or keep_generating == "y":
# Appends user inputs to 'instances' list
instances.append([instance_name, instance_params, instance_description])
rounds += 1
else:
break
def generate_schema(self):
with open(self.schema_filename + ".json", "w") as schema_file:
# Writes the JSON object to the JSON file. This line gives me the error.
schema_file.write(json.dumps(self.return_schema()))
schema_file.close()
def return_schema(self):
# Returns a JSON object based on user inputs
return {
{
"class": {
"name": self.class_name,
"instance": {
"name": instance[0],
"parameters": "self" + instance[1],
"description": instance[2]
}
}
} for instance in self.instances
}
schema_gen = GenerateSchema()
schema_gen.generate_schema()
如果你不懂我的代码,请告诉我。欢迎您提供任何帮助或建议。(我已经看过其他有同样错误的问题,但它们没有给我答案)
谢谢。您的方法return\u模式必须返回值列表才能将其转储到JSON中
def return_schema(self):
# Returns a JSON object based on user inputs
return [
{
"class": {
"name": self.class_name,
"instance": {
"name": instance[0],
"parameters": "self" + instance[1],
"description": instance[2]
}
}
} for instance in self.instances
]
我解决了这个问题,通过循环遍历
实例
列表,并根据实例的名称创建一个新的嵌套字典。如果您两次输入相同的实例名称,第二次输入将覆盖第一次输入(我仍然需要使用不同的实例名称)
生成的JSON有多个实例(取决于您提交的实例数量)。我所做的是使用for循环
为每个实例创建一个新的嵌套字典。代码如下:
import json
class GenerateSchema:
rounds = 0
instances = []
while True:
if len(instances) == 0:
schema_filename = input("*.json filename: ")
class_name = input("ClassName: ")
instance_name = input("Instance name: ")
instance_params = input("Instance parameter(s) ENTER for 'self' only: ")
instance_description = input("Instance description (OPTIONAL): ")
keep_generating = input("Generate another instance? [Y/N]: ")
if keep_generating == "Y" or keep_generating == "y":
instances.append([instance_name, instance_params, instance_description])
rounds += 1
elif keep_generating == "N" or keep_generating == "n":
instances.append([instance_name, instance_params, instance_description])
break
else:
print("[Y/N] please: ")
def generate_schema(self):
make_file = open(self.schema_filename + ".json", "w")
make_file.write('{}')
make_file.close()
with open(self.schema_filename + ".json", "r+") as f:
data = json.load(f)
data[self.class_name] = {
"name": self.class_name,
}
if not self.instance_params:
for instance in self.instances:
data[self.class_name][instance[0]] = {
"name": instance[0],
"parameters": "self",
"description": instance[2]
}
else:
for instance in self.instances:
data[self.class_name][instance[0]] = {
"name": instance[0],
"parameters": "self, " + instance[1],
"description": instance[2]
}
f.seek(0)
json.dump(data, f)
f.truncate()
感谢您的帮助。此错误是由于尝试制作一组词典而导致的。字典是不易损坏的,因为它们是易变的。