使用Schwifty与Pandas验证IBAN时遇TypeError问题求助
IBAN验证问题的错误分析与解决办法
为啥会报错?
- 第一个错误:
IBAN()方法只能接受单个字符串,你直接把整个IBAN列(pandas的Series对象)传进去了,自然触发TypeError。 - 第二个错误:
str(df['IBAN'])不是把每个IBAN单独转成字符串,而是把整列的所有内容(包括索引、NaN这些)拼成了一个超级长的无效字符串,Schwifty肯定验证不通过,所以报了InvalidStructure。
正确的代码写法
用pandas的apply方法逐个处理每个IBAN,同时捕获异常返回具体验证说明:
import pandas as pd from schwifty import IBAN from schwifty.exceptions import SchwiftyException importfile = 'bp.txt' # 读取CSV时明确指定双引号为文本限定符,避免解析错误 df = pd.read_csv(importfile, sep=';', encoding='latin-1', quotechar='"') def check_iban(iban_value): # 先处理空值或者非字符串的情况 if pd.isna(iban_value) or not isinstance(iban_value, str): return "IBAN为空或格式无效" try: iban = IBAN(iban_value) # 验证通过的话可以返回更详细的信息,比如所属国家、BBAN部分 return f"验证通过:国家代码{iban.country_code},BBAN码{iban.bban}" except SchwiftyException as error: # 验证失败时返回具体错误原因 return f"验证失败:{str(error)}" # 对IBAN列的每个值应用验证函数 df['IBAN_remarks'] = df['IBAN'].apply(check_iban)
重点说明
apply方法会遍历IBAN列的每一个值,单独传给验证函数,刚好匹配IBAN()只能处理单个字符串的要求。- 加了空值判断,避免NaN或者非字符串类型的条目触发额外错误。
- 捕获Schwifty的所有异常,把具体错误信息返回,方便你定位每个IBAN的问题。
- 读取CSV时指定
quotechar='"',确保双引号包裹的内容被正确解析,不会因为分号在引号内导致列拆分错误。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

