Python(Selenium)读写CSV变量报错求助:TypeError问题排查
解决Python代码中的TypeError与逻辑问题
嘿,我看了你的代码和遇到的报错,咱们一步步拆解问题,把你的需求流程跑通~
首先先明确你的目标流程:
- 获取用户输入的数字
- 拆分单个数字变量
- 追加写入
data.csv - 读取文件里的所有变量存入列表
- 根据变量与列表长度的关系执行对应代码
先看你遇到的TypeError: count() takes exactly one argument (0 given)错误——这是因为你直接调用了Python内置的list类型的count()方法,而且还没传参数;另外代码里的integers[i]中的i也没定义,这就导致了双重错误。除此之外,代码里还有几个和csv读写、逻辑匹配相关的小问题,咱们一起修正:
你的原始代码
from selenium import webdriver import time import csv x = raw_input("Enter numbers separated by a space") integers = [[int(i)] for i in x.split()] with open("data.csv", "a") as f: writer = csv.writer(f) writer.writerows(integers) with open('data.csv', 'r') as f: file_contents = f.read() previous_FONs = file_contents.split(' ') if list.count(integers[i]) == 1: #run some code elif list.count(integers[i]) == 2: #run some code
问题拆解与修正方案
raw_input的兼容性问题:如果用的是Python3,raw_input已经被移除,要换成input;如果是Python2,这部分没问题,但建议升级到Python3。- CSV读写的错误:你用
csv.writer写入的是每行一个整数,但读取时用f.read().split(' ')完全不对——csv文件里的内容是每行一个数,按空格拆分根本得不到正确的数字列表,得用csv.reader来解析。 count()调用错误:你想统计的是某个数字在列表里的出现次数,但不能用内置list类型的方法,要调用你自己定义的列表变量的count(),同时要明确统计的是哪个数字。- 目标逻辑未实现:你原本要判断「变量≤列表长度」,但代码里写的是
count判断,得把这部分逻辑补全。
修正后的完整代码
from selenium import webdriver import time import csv # 获取用户输入(Python3用input替代raw_input) x = input("Enter numbers separated by a space: ") # 拆分为一维整数列表,方便后续处理 integers = [int(i) for i in x.split()] # 追加写入data.csv,加newline=''避免Windows下出现空行 with open("data.csv", "a", newline='') as f: writer = csv.writer(f) # 每个数字单独写一行,和你原本的写入逻辑一致 for num in integers: writer.writerow([num]) # 正确读取data.csv中的所有数字,存入列表 previous_FONs = [] with open('data.csv', 'r') as f: reader = csv.reader(f) for row in reader: # 跳过可能的空行,把每行的内容转成整数存入列表 if row: previous_FONs.append(int(row[0])) # 实现你的核心逻辑:判断变量是否≤列表长度,执行对应代码 for num in integers: if num <= len(previous_FONs): # 这里替换成你要执行的代码 print(f"变量{num} ≤ 列表长度{len(previous_FONs)},执行对应代码") else: print(f"变量{num} > 列表长度{len(previous_FONs)},不执行对应代码") # 如果你原本的count逻辑是想统计数字出现次数,也可以这样实现 for num in integers: occurrence_count = previous_FONs.count(num) if occurrence_count == 1: # 替换成你要执行的代码 print(f"数字{num}出现1次,执行对应代码") elif occurrence_count == 2: # 替换成你要执行的代码 print(f"数字{num}出现2次,执行对应代码") else: print(f"数字{num}出现{occurrence_count}次,执行其他逻辑")
关键修改点说明
- 把输入处理改成Python3兼容的
input,同时简化了整数列表的生成。 - 写入CSV时添加
newline='',避免在Windows系统下写入后出现多余空行。 - 用
csv.reader读取文件,正确解析每行的数字,生成有效的整数列表previous_FONs。 - 调用
previous_FONs.count(num)来统计数字出现次数,而非错误调用内置list的方法。 - 补全了你原本的核心逻辑:判断变量与列表长度的关系,执行对应代码。
内容的提问来源于stack exchange,提问作者booooooky
相关产品推荐
相关产品推荐

