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

输入有效会员卡号时return语句未执行的Python代码问题排查

问题原因

  • 重复调用校验方法:你在Account类的__init__初始化方法中已经调用了一次self.scan_id(),执行a = Account()实例化的时候就会触发第一次输入校验,之后你又单独写了一行a.scan_id(),所以总共会弹出两次输入框。你输入有效卡号后第一次校验已经通过,返回的结果直接赋值给了私有属性__id没有打印,你看到的第二次输入框是第二次调用方法触发的,就会误以为有效卡号还会重复弹框。
  • 遍历校验逻辑错误:当前scan_id的循环只会校验第一个会员的卡号:如果输入的卡号和第一个会员的card_number不一致,会直接返回Invalid ID,根本不会遍历后面的会员数据,只有第一个会员的卡号13能被识别为有效,其余22、33、43都会被误判为无效。
  • 额外兼容提示:你的members.json里的id字段前有BOM头标识(就是\u00ef\u00bb\u00bf前缀),读取文件的时候指定编码为utf-8-sig可以避免后续读取id字段出现异常。

修正后代码

from enum import Enum
from abc import ABC, abstractmethod
import csv
import json
from datetime import datetime, timedelta, date

membersJsonPath = 'members.json'

class BookStatus(Enum):
  AVAILABLE, RESERVED, LOANED, LOST = 1, 2, 3, 4

class ReservationStatus(Enum):
  WAITING, PENDING, CANCELED, NONE = 1, 2, 3, 4

class AccountStatus(Enum):
  ACTIVE, CLOSED, CANCELED, NONE = 1, 2, 3, 4

class Account(ABC):
    def __init__(self, status=AccountStatus.ACTIVE):
        self.__id = self.scan_id()
        self.__status = status
        # 初始化完成后直接打印校验结果
        print(self.__id)
        
    def scan_id(self):
      with open(membersJsonPath, 'r', encoding='utf-8-sig') as membersJson:
        data = json.load(membersJson)
        input_id = input("Please enter your member ID: ")
        for member in data['members']:
          if member['card_number'] == input_id:
            return f"Welcome, {member['first_name']}!" 
        # 遍历完全部会员未匹配到,再返回无效
        return "Invalid ID"

# 实例化就会触发一次校验,无需额外单独调用scan_id
a = Account()
# 后续需要重新刷卡校验的时候再调用即可:print(a.scan_id())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:54:04