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

