如何判断文件行与指定字符串是否相等?Python代码异常排查求助
问题分析与解决
核心问题1:读取的行包含换行符,导致匹配失败
你的dict_check方法用readlines()读取文件时,每一行末尾会自带换行符\n(文件最后一行可能例外),而你传入的password是不带换行符的字符串,两者永远无法匹配,导致dict_check始终返回False。
比如dict.txt里有一行123456,实际读取到的内容是123456\n,和你传入的password="123456"比较时,"123456\n" == "123456"结果为False。
核心问题2:逻辑可能与需求相反
从代码逻辑看,你在setter中写的if not User.dict_check(value): raise ValueError,意思是只要密码不在字典里就抛出异常,这和常规的“禁止使用字典中的弱密码”逻辑完全相反。如果你的需求是避免弱密码,逻辑需要调整。
修复方案
步骤1:修正dict_check方法,去除换行符
修改方法,用strip()移除每行的换行符和首尾空白,避免格式差异导致匹配失败:
@staticmethod def dict_check(password): with open('dict.txt', 'r') as f: for line in f: if line.strip() == password: return True return False
注:直接迭代文件对象比readlines()更高效,无需一次性读取所有内容到内存。
步骤2:修正setter的逻辑(若需求是禁止弱密码)
如果你的目的是不允许使用字典中的弱密码,将setter中的判断改为:
if User.dict_check(value): raise ValueError("该密码属于弱密码,禁止使用") self.__password = value
验证测试
- 在
dict.txt中写入测试用弱密码:
123456 admin password
- 尝试设置密码为
"123456",此时应触发异常;设置密码为"MyStrongPass123",则正常完成赋值。
内容的提问来源于stack exchange,提问作者OwnYhide
相关产品推荐
相关产品推荐

