如何通过用户输入执行多行Python代码?exec()报错求助
解决用户输入多行Python代码并执行的问题
问题根源
你遇到的语法错误,本质是input()函数会将用户输入的内容作为原始字符串读取。当你输入a=[1,2,3]\nfor i in a:\n\tprint(i)时,\n和\t不会被解析成换行符或制表符,而是被当成两个独立的字符(\和n、\和t)。Python执行时会把\n误认为是行续行符后跟着无效字符,从而抛出语法错误。
而你硬编码的字符串里的\n是Python语法层面的转义字符,会被自动解析成换行符,所以能正常运行。
解决方案
方案1:支持用户直接输入多行代码(推荐)
让用户直接换行输入代码,直到输入空行(或特定结束标记)再执行,更符合常规输入习惯:
while True: print("Enter your code (enter empty line to execute):") code_lines = [] while True: line = input() if not line: break code_lines.append(line) full_code = '\n'.join(code_lines) exec(full_code)
用户输入示例:
a=[1,2,3] for i in a: print(i) # 输入空行触发执行
方案2:解析用户输入中的转义字符
如果必须让用户输入带\n、\t的字符串,可以手动解析这些转义字符,将其转换为实际的换行、制表符:
while True: order = input('Enter code ') # 将字符串中的转义字符解析为实际控制字符 parsed_code = order.encode().decode('unicode_escape') exec(parsed_code)
此时用户输入a=[1,2,3]\nfor i in a:\n\tprint(i),parsed_code会自动把\n转成换行,\t转成制表符,exec就能正常执行。
重要注意事项
绝对不要在生产环境或面向未知用户的程序中使用exec()执行用户输入的代码,这会导致严重的安全风险——恶意用户可以输入删除文件、窃取数据等危险代码,完全控制你的系统。该方式仅适合本地学习测试场景。
内容的提问来源于stack exchange,提问作者Vadym18633350
相关产品推荐
相关产品推荐

