Python从CSV读取代码用exec()执行报SyntaxError异常如何解决?
问题根因
- 你在CSV中存储的
\n是字面量字符组合(反斜杠+字母n),不是Python识别的换行转义符。直接写在Python代码里的\n会被解释器自动转义为真实换行,但从CSV读取的字符串会把\n当成两个普通字符,执行时就会触发换行符转义相关的语法错误。 - 你用
split(';')拆分语句的逻辑也不匹配你CSV里存储的内容格式:你的CSV内容用\n分隔语句,没有分号,拆分后得到的是一整串带字面量\n的字符串,自然无法执行。
解决方案
你只需要先把读取到的字符串里的字面量转义序列转为真实的转义字符,再执行即可,不需要拆分语句也可以直接运行:
trans = df.loc[df['ldms_name'] == row[2]]['translation'].item() # 把字符串里的字面量转义序列(比如\n、\t等)转为Python识别的真实转义字符 processed_trans = trans.encode('utf-8').decode('unicode_escape') exec(processed_trans)
如果确实需要按行拆分执行,可以用下面的写法,同时过滤空行避免报错:
trans = df.loc[df['ldms_name'] == row[2]]['translation'].item() processed_trans = trans.encode('utf-8').decode('unicode_escape') for stmt in processed_trans.split('\n'): if stmt.strip(): exec(stmt)
补充注意点
exec()执行外部传入的代码存在极高的安全风险,仅在你完全信任CSV内容来源的场景下使用。- 如果后续你调整CSV存储格式,同时用分号和换行分隔语句,可以先把
\n替换为;再按分号拆分,注意过滤空语句即可。
内容的提问来源于stack exchange,提问作者mark moorman
相关产品推荐
相关产品推荐

