【问题标题】:Python SyntaxError in for loop [duplicate]for循环中的Python SyntaxError [重复]
【发布时间】:2019-01-08 15:41:53
【问题描述】:

我正在尝试从 JSON 中提取一些特定数据,所以我编写了以下代码

echo "$Group_ID" | python -c 'import json,sys;obj=json.load(sys.stdin); for o in obj: if o[name] == "Admin_UserGroup": print o["id"]';

但它的抛出错误

有人可以帮忙告诉我代码有什么问题吗?

   File "<string>", line 1
     import json,sys;obj=json.load(sys.stdin); for o in obj: if o["name"] == "Admin_UserGroup": print o["id"]
                                                 ^
SyntaxError: invalid syntax

这是版本详情

[root@mdfdevha1 ~]# python -V
Python 2.7.5

编辑 1:附加图片

【问题讨论】:

  • 你使用 Python 2 吗?
  • 您是否尝试将其作为普通脚本执行(而不是单行)?
  • @MartinThoma 我更新了版本信息,是的,我正在单行尝试。
  • @U9-Forward 在这个例子中w3schools.com/python/python_for_loops.asp他们写的一样。
  • @AdamSmith 好的,我会看到我要求在文件中编写 python 代码的可行性。

标签: python for-loop if-statement syntax-error


【解决方案1】:

首先,您还应该发布Error - '语法错误'

另外,这会有所帮助:One-line list comprehension: if-else variants

因此,这个 python 代码应该适合你:

import json ,sys;
obj = json.load(sys.stdin);
print ('\n'.join([str(o["id"]) if o[name] == "Admin_UserGroup" else "" for i in obj]).replace('\n\n','\n').strip('\n'))

把它收缩成一个衬里:

echo "$Group_ID" | python -c "import json,sys;obj=json.load(sys.stdin);print ('\n'.join([str(o['id']) if o[name] == 'Admin_UserGroup' else '' for i in obj]).replace('\n\n','\n').strip('\n'))";

编辑: 经过 10 分钟的错误修复后,此方法有效!
让我们打印 1 - 10 中的偶数:

print('\n'.join([str(i) if i % 2 == 0 else '' for i in range(1, 11)]).replace('\n\n','\n').strip('\n'))

哪些输出符合预期

编辑 2: 你不能在你的 python 命令中使用单引号

编辑 3:工作命令

[root@mdfdevha1 ~]# echo "$Group_ID" | python -c "import json,sys;obj=json.load(sys.stdin);print ('\n'.join([str(i['id']) if i['name'] == 'Admin_UserGroup' else '' for i in obj]).replace('\n\n','\n').strip('\n' ))";

【讨论】:

  • 我不确定这有什么不同。
  • 它与众不同,因为它有效
  • @KGSHbteamMineTeamBeastO_ 如果一行中的整个命令在 Python 中是一个问题,因为我不知道 python。
  • 由于代码在for 循环中引发错误(即使使用您的代码),我不敢苟同。
  • 这里没有理由使用if pred then a else b 成语。请注意,print number 也等于 None(有副作用)。只需if number % 2: print number 就可以了——它只是在这种情况下不起作用(在导入语句和单行表达式中的分号之后)
【解决方案2】:

JSON 的键应该用引号括起来。

试试这个:

echo "$Group_ID" | python -c 'import json,sys;obj=json.load(sys.stdin); for o in obj: if o["name"] == "Admin_UserGroup": print o["id"]'

谢谢

【讨论】:

  • 上述命令也有同样的异常。
  • 尝试删除 python 脚本中的分号。这可能会有所帮助。
  • @SmashGuy 那不再是有效的 Python 了。你正在抓住稻草——测试一些东西。
  • 请在发布之前测试您的代码...
  • @AdamSmith 感谢新的成语。但我以前从未见过分号,因为我没有在 Python 2x 中工作过。
猜你喜欢
  • 2020-10-18
  • 2016-10-04
  • 1970-01-01
  • 2010-11-14
  • 2021-10-21
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多