Python调用自定义read_csv方法报TypeError参数数量不符怎么解决
问题根源
你定义的read_csv是类的实例方法,但是函数签名没有声明接收实例自身的self参数。
调用self.booking.read_csv(path)的时候,Python会自动将booking实例作为第一个位置参数传入方法,加上你主动传的path,实际一共传入了2个位置参数,但你写的函数只支持0到1个参数,所以触发类型错误。
解决方法
把函数定义修改为:
from typing import List, Optional from pathlib import Path import csv def read_csv(self, path: Optional[str] = None) -> List[List[str]]: lead = Path(__file__).parent / f'../data/{path}' entries = [] print('Reading dataset...') with open(lead, 'r') as csvfile: video_reader = csv.reader(csvfile) for row in video_reader: entries.append(row) # 原代码返回print(entries)会得到None,不符合你声明的返回值类型,修改为直接返回entries return entries
其他需要修正的潜在问题
- 原函数返回
return print(entries):print函数的返回值是None,和你声明的List[List]返回类型不匹配,调用方接收结果会拿到空值 - 没有做
path为空的校验:如果调用时不传path参数,path为None,拼接路径时会抛出字符串拼接异常 - 类型标注建议优化:
List[List]可以明确指定内层元素类型为str,即List[List[str]],可读性更高
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

