You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Shell与Python传递URL字典时的‘无效标识符’错误

解决Shell传递Python字典环境变量时的"Not valid identifier"错误

问题背景

原本实现是在Shell脚本中传递emp_code环境变量,Python脚本根据该变量读取内置字典输出对应URL,运行正常。尝试将字典移至Shell脚本作为环境变量传递时,出现"Not valid identifier"错误。

错误原因分析

  1. Shell变量定义格式错误:export _emp_url= '中等号后多余空格,且多行字符串的引号嵌套、换行处理不符合Shell语法规范。
  2. Python解析错误:直接将环境变量的字符串值当作字典使用({Emp_url}[_emp_code]),无法将字符串解析为字典对象。
  3. 原Python代码存在语法小错误:is filed应改为isfile,Print需小写为print。

正确解决方案

方案一:用Python字典格式传递,通过ast.literal_eval解析

修改后的trigger.sh:

export emp_code='IT'
# 单行定义字典字符串,注意等号后无空格,引号正确嵌套
export _emp_url="{'IT':{'Emp_url':'www.it.com'},'Prod':{'Emp_url':'www.prod.com'},'Qa':{'Emp_url':'www.qa.com'}}"
py /C/Users/LocalDB/emp.py

若需要多行排版,可使用反斜杠转义换行:

export emp_code='IT'
export _emp_url='\
{"IT":{"Emp_url":"www.it.com"},\
"Prod":{"Emp_url":"www.prod.com"},\
"Qa":{"Emp_url":"www.qa.com"}}'
py /C/Users/LocalDB/emp.py

修改后的emp.py:

import os
import ast
from os import listdir
from os.path import isfile, join

_emp_code = os.environ['emp_code']
# 将环境变量中的字符串解析为Python字典
emp_url_dict = ast.literal_eval(os.environ['_emp_url'])
Emp_url = emp_url_dict[_emp_code]
print(Emp_url)

方案二:用JSON格式传递(更推荐,解析更安全)

JSON格式与Python字典兼容,且解析逻辑更通用,避免引号嵌套问题。

修改后的trigger.sh:

export emp_code='IT'
# JSON格式需使用双引号,注意字符串整体用单引号包裹
export _emp_url='{"IT":{"Emp_url":"www.it.com"},"Prod":{"Emp_url":"www.prod.com"},"Qa":{"Emp_url":"www.qa.com"}}'
py /C/Users/LocalDB/emp.py

修改后的emp.py:

import os
import json
from os import listdir
from os.path import isfile, join

_emp_code = os.environ['emp_code']
# 解析JSON字符串为Python字典
emp_url_dict = json.loads(os.environ['_emp_url'])
Emp_url = emp_url_dict[_emp_code]
print(Emp_url)

关键修正点

  • Shell中export变量时,等号与变量值之间不能有空格
  • 传递复杂字符串时,需保证Shell语法下的引号嵌套正确,或使用JSON这种通用格式
  • Python需通过ast.literal_eval或json.loads将环境变量的字符串值解析为字典对象,不能直接当作字典使用
  • 修正原Python代码中的语法错误:is filed→isfile,Print→print

内容的提问来源于stack exchange,提问作者Balaji R B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:07:43