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

Python eval计算器拦截字母输入功能失效问题求解

问题根因

你调用__contains__时传参存在语法错误:Python中多个相邻无分隔符的字符串会自动拼接为一个完整字符串,你代码里所有用引号包裹的单字符最终会被合并为一长串连续字符,判断逻辑变成了「检查输入是否包含这一整串超长的连续字符」,几乎不可能匹配成功,因此始终触发else分支。

修复代码

推荐使用白名单校验逻辑,仅允许计算器必要的字符存在,比黑名单漏判风险更低:

# 白名单:仅允许数字、四则运算符、括号、小数点、空格
allow_chars = set("0123456789+-*/(). ")
if any(c not in allow_chars for c in calc):
    print("Test - 包含非法字符")
else:
    print("Answer: " + str(eval(calc)))

如果需要沿用黑名单校验的思路,可修改为如下写法:

import string
# 黑名单包含所有大小写字母和指定特殊符号
illegal_chars = set(string.ascii_letters + r'!#$%&\'()",.:;<>?@[]^_`{|}~')
if any(c in illegal_chars for c in calc):
    print("Test - 包含非法字符")
else:
    print("Answer: " + str(eval(calc)))

注意事项

eval直接执行用户输入存在极高安全风险,用户可构造恶意代码执行任意系统操作,作业场景可通过严格的白名单校验降低风险,正式生产环境禁止直接使用eval处理用户输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:54:01