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

如何在Python的eval中结合f-string执行match-case语句?

问题根因
  • eval() 仅能执行求值表达式,而match/case是Python的复合流程控制语句,不属于表达式范畴,本身就无法被eval解析运行。
  • 原写法用反斜杠续行拼接字符串时,生成的代码缩进不符合Python语法规范,case块没有正确缩进为match的子代码块,即使换成exec也会报语法错误。
可运行修复代码

把eval替换为支持执行任意Python语句的exec(),同时用三引号构造格式正确的多行代码字符串,避免缩进错乱:

for i in ['int', 'bool']:
    code = f"""
match 1:
    case {i}():
        print(1)
"""
    exec(code)

运行上述代码,当i='int'时会正常输出1;当i='bool'时不会触发分支,因为整数1的类型是int,不属于bool类的实例(布尔值True/False才是bool的实例)。

额外提醒

动态拼接代码用exec/eval执行有极高的安全风险,如果i的来源是外部用户输入、不可信的接口返回,很容易被构造恶意内容执行任意系统操作,生产环境尽量用字典映射、类型判断分支等更安全的方案替代这种动态语句写法。

内容的提问来源于stack exchange,提问作者apostofes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:09:21