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

Python3实现mask-string字符串掩码功能报ValueError错误求助

问题排查

1. 报错根本原因

触发ValueError: invalid literal for int() with base 10: ''的核心是代码尝试将空字符串转换为整数,触发场景为:
你在调用乘法函数前,需要用户输入重复次数masking_string = input("Enter number: "),如果此时用户直接回车没有输入任何内容,拿到的就是空字符串'',传入multiply_str函数后执行int(masking_string)就会抛出该错误。

2. 额外逻辑问题

你的mask_string函数存在冗余逻辑:
你已经通过s = string3[-4:].rjust(len(string3), "#")生成了正确的掩码字符串(除最后四位外全部替换为#),后续调用multiply_str拼接的操作完全多余,传入的空字符串乘以任意次数结果还是空,对最终结果没有任何影响,属于无效代码。

3. 修复方案

功能函数修改

def mask_string(string3):
    """Mask string"""
    # 直接返回已生成的正确掩码即可
    return string3[-4:].rjust(len(string3), "#")

def multiply_str(string3, multiply_times):
    """Multiply string"""
    # 先做输入合法性校验,避免非数字/空值转换报错
    if not multiply_times.isdigit():
        return "错误:请输入合法的正整数作为重复次数"
    return string3 * int(multiply_times)

调用逻辑修改

elif choice == "10":
    string3 = input("Enter a string that will replace all of the caracters with # exept the 4 last ones: ") 
    print(marvin.mask_string(string3)) 
    # 变量名调整更易读,避免和其他变量混淆
    multiply_times = input("Enter number: ") 
    print(marvin.multiply_str(string3, multiply_times)) 

可选实现:用乘法函数实现掩码逻辑

如果你希望通过调用multiply_str生成掩码前缀,而非使用rjust方法,可以调整mask_string代码如下:

def mask_string(string3):
    """Mask string"""
    # 字符串长度小于等于4时不需要掩码
    if len(string3) <= 4:
        return string3
    # 生成前面的#前缀,个数为总长度减4
    prefix = multiply_str("#", str(len(string3) - 4))
    return prefix + string3[-4:]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:18:04