在Bash命令行执行Python内联代码时遇语法错误求助
问题原因与解决方法
错误原因
Python语法规则里,分号;仅用于分隔独立的简单语句(如导入、赋值、单一打印操作),而for循环属于复合语句,它需要后续缩进的代码块,不能直接用分号与前面的简单语句串联在同一行。你把复合语句和简单语句用分号强行拼接,违反了Python的语法规范,因此触发SyntaxError。
解决方案
方案1:保留正常Python缩进,用换行分隔语句
在Bash的双引号内可以直接换行,让Python代码保持正常的缩进结构:
string='[{"url": "https://www.example.com/1", "description": "URL example number 1", "name": "test1", "id": "1"}, {"url": "https://www.example.com/2", "description": "URL example number 2", "name": "test2", "id": "2"}]' echo "$string" | python3 -c "import sys,json data = json.load(sys.stdin) for item in data: print(item['id'])"
注意:这里把原字符串改成了标准JSON格式(双引号包裹键值),避免json.load解析时出现潜在错误。
方案2:用生成器表达式简化为单条简单语句
把循环逻辑塞进生成器表达式,转化为Python允许的简单语句形式,就能继续用分号串联:
string='[{"url": "https://www.example.com/1", "description": "URL example number 1", "name": "test1", "id": "1"}, {"url": "https://www.example.com/2", "description": "URL example number 2", "name": "test2", "id": "2"}]' echo "$string" | python3 -c "import sys,json; data=json.load(sys.stdin); print('\n'.join(item['id'] for item in data))"
这种方式通过join把所有id拼接成换行分隔的字符串,一次打印输出,效果和循环打印一致。
内容的提问来源于stack exchange,提问作者tuffo19
相关产品推荐
相关产品推荐

