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

为何int('10**2')报错?type(10**2)却为int类型

整数幂输入的解析问题与解决方案

问题说明

  • 执行int('10**2')会抛出错误:ValueError: invalid literal for int() with base 10: '10**2',但直接计算10**2后,type(10**2)的结果是<class 'int'>。
  • 当通过n = input()获取用户输入,再执行int(n)时,若输入为10**2,会触发上述错误。本质原因是10**2不是整数字面量,它是一个需要求值的表达式,但直接使用int(eval(n))存在安全隐患——用户输入可能是任意危险字符串。
  • 对比浮点数的情况:float('1e2')不会报错,因为1e2是浮点数的合法字面量,可被float()直接解析。

临时解决方案

方案1:仅处理单个幂运算表达式

适用于输入仅包含一个**的情况,比如10**2:

n = input()
if '**' in n:
    base, exp, *a = n.split('**')
    if a:
        raise ValueError(f"This input, {n}, can't be interpreted as an integer")
    n = int(base)**int(exp)
else:
    n = int(n)

方案2:支持多阶右结合幂运算

Python中**是右结合运算符,比如3**3**3等价于3**(3**3),以下代码可处理这类情况:

n = input()
if '**' in n:
    operands = n.split('**')
    # ** 遵循右结合规则
    exp = 1
    while operands:
        base = int(operands.pop())
        exp = base ** exp
    n = exp
else:
    n = int(n)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:50:32