为何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
相关产品推荐
相关产品推荐

