Python验证类代码异常:重新输入逻辑未触发问题排查求助
Python验证类输入逻辑错误排查
原始代码
class validation(): confirmation = input("Your information is as above, do you confirm?: E/H: ") if confirmation == "E": print("You can continue.") else: wrong_information = input("Which information is wrong: ") if wrong_information == name: print(input("Enter again: ")) elif wronglis_information == surname: print(input("Enter again: ")) elif wrong_information == address: print(input("Enter again: ")) elif wronglis_information == il_ilce: print(input("Enter again: ")) elif wronglis_information == population: print(input("Enter again: ")) elif wrong_information == age: print(input("Enter again: ")) elif yanlis_bilgi == phone_number: print(input("Enter again: ")) else: print("You have not entered any information or the information you have entered is invalid...")
问题分析
变量名拼写错误:
- 多处误写为
wronglis_information,正确应为wrong_information - 最后一个判断条件里的
yanlis_bilgi是土耳其语(意为“错误信息”),未与前面的变量名统一,导致逻辑无法触发
- 多处误写为
比较逻辑完全错误:
用户输入的是字段名称的字符串(比如输入"name"),但代码里是将输入内容和变量name的实际值做比较,而非和字段名的字符串"name"比较,这几乎不可能匹配,直接跳转到else分支。类结构不合理:
把交互逻辑直接写在类的顶层,类定义时就会立即执行所有输入和判断代码,不符合面向对象的使用规范,逻辑应该封装到类的方法中。重新输入未更新数据:
即使触发输入逻辑,也只是打印用户输入的内容,没有将新值赋值给对应的变量,无法实现修正信息的核心功能。
修复后的代码示例
class Validation: def __init__(self, user_data): # 用字典存储用户数据,便于通过字段名直接修改 self.user_data = user_data def validate(self): while True: confirmation = input("Your information is as above, do you confirm?: E/H: ") if confirmation == "E": print("You can continue.") return self.user_data else: wrong_field = input("Which information is wrong (enter field name like name/surname): ") if wrong_field in self.user_data: new_value = input(f"Enter correct {wrong_field}: ") self.user_data[wrong_field] = new_value print(f"{wrong_field} updated successfully.") else: print("Invalid field name, please enter again.") # 使用示例 user_info = { "name": "Onur", "surname": "Doe", "address": "Example St. 123", "il_ilce": "Istanbul/Beşiktaş", "population": "1000000", "age": "28", "phone_number": "555-1234" } validator = Validation(user_info) updated_user_data = validator.validate()
修复说明
- 改用字典存储用户数据,通过字段名字符串直接定位修改项,匹配用户输入逻辑
- 将验证逻辑封装到
validate()方法中,符合类的使用规范 - 统一变量名,修正拼写错误
- 新增循环机制,支持用户多次修改直到确认无误
- 实际更新用户数据,而非仅打印输入内容
内容的提问来源于stack exchange,提问作者Onur
相关产品推荐
相关产品推荐

