Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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
loguru中的文本和列表出现Python错误:+;的操作数类型不受支持:';非类型';和';列表';_Python_Python 3.x_List_Operands_Loguru - Fatal编程技术网

loguru中的文本和列表出现Python错误:+;的操作数类型不受支持:';非类型';和';列表';

loguru中的文本和列表出现Python错误:+;的操作数类型不受支持:';非类型';和';列表';,python,python-3.x,list,operands,loguru,Python,Python 3.x,List,Operands,Loguru,使用loguru将列表写回配置文件,并收到+:“NoneType”和“list”的可怕的不支持的操作数类型错误。我知道错误来自于试图将文字和列表组合在一起。我试图通过使用一个变量来表示文本来分解该行,这只会产生相同的错误 有问题行的代码块: def更新配置(配置:dict): """ 更新现有配置文件。 参数 ---------- 配置:dict 要写入配置文件的配置。 """ config[“ids_to_retry”]=列表(设置(config[“ids_to_retry”]+失败的_id)

使用loguru将列表写回配置文件,并收到+:“NoneType”和“list”的可怕的
不支持的操作数类型错误。我知道错误来自于试图将文字和列表组合在一起。我试图通过使用一个变量来表示文本来分解该行,这只会产生相同的错误

有问题行的代码块:
def更新配置(配置:dict):
"""
更新现有配置文件。
参数
----------
配置:dict
要写入配置文件的配置。
"""
config[“ids_to_retry”]=列表(设置(config[“ids_to_retry”]+失败的_id))
打开(“config.yaml”、“w”)作为yaml_文件:
dump(配置,yaml\u文件,默认\u流\u样式=False)
logger.info(“将上次读取的消息\u id更新到配置文件”)
完整错误输出:
回溯(最近一次呼叫最后一次):
文件“/telegram downloader quackified/media_downloader.py”,第359行,在
main()
文件“/telegram downloader quackified/media_downloader.py”,第343行,主
更新了\u config=asyncio.get\u event\u loop()。运行\u直到完成(
文件“/miniconda3/lib/python3.9/asyncio/base\u events.py”,第642行,运行直到完成
返回future.result()
文件“/telegram downloader quackified/media\u downloader.py”,第324行,开始导入
更新配置(配置)
更新配置中的第35行文件“/telegram downloader quackified/media\u downloader.py”
config[“ids_to_retry”]=列表(设置(config[“ids_to_retry”]+失败的_id))
我知道短语
列表中需要更改一些内容(设置(配置[“ids\u to\u retry”]+失败的id))
,我只是不确定是什么


提供更多信息: FAILED_id是脚本遇到异常且无法成功完成下载时生成的列表。出现这种情况时,消息id将存储在内存中,例如
FAILED_id.append(message.message_id)
。然后使用以下语句将其写入配置文件:

如果失败\u id:
logger.info(
“下载%d个文件失败。”
“将失败的消息ID添加到配置文件。\n”,
len(设置(失败的\u ID)),
)
更新配置(更新配置)
它的原始值是:

失败\u id:list=[]
其中“ids_to_retry”或多或少只是配置文件中使用的一个标签。它只是一个文本字符串,是非类型。最终结果是在配置文件中写入这两个字符串,类似于以下内容:

ids\u to\u重试:
- 26125
- 2063
- 2065
- 2080
- 2081
- 22052
- 21029
- 553
- 554
- 555
- 2102
- 22074

我希望这澄清了我们正在处理的变量的性质。

失败的原因是
config[“ids\u to\u retry”]=None
并且您正在尝试将非类型扩展到列表。您可以使用

config[“ids\u to\u retry”]=list(如果config[“ids\u to\u retry”]+FAILED\u ids)],如果config[“ids\u to\u retry”]否则失败,则设置(config[“ids\u to\u retry”]+FAILED\u ids)

因此,如果
config[“ids\u to\u retry”]
None
,则需要
config[“ids\u to\u retry”]=失败的\u id
,而不尝试扩展它


假设
FAILED\u id
是一个列表,如果不是,您可以键入cast将其转换为列表。

您更正的语句似乎将FAILED\u id和“IDS\u to\u retry”放置在列表中在非此即彼的争论中。我可能错了,但无论如何我都在尝试。事实上,这类似于三元运算符,如果ids_to_retry不是None,我将扩展列表。如果没有人使用失败的ids,那么它只是在嘟嘟囔囔地前进,完全失去了它的荣耀。似乎工作得很好。“此代码非常强大…”谢谢!确认,脚本已成功完成。