python-3.x - TypeError:“用户名”对象在 python3 中不可迭代
问题描述
虽然令人兴奋,但代码出现错误尝试迭代对象但没有运气
import os
import sys
class usernames(object):
def __init__(self, filename: str):
self.filename = filename
self.words = self.file_to_text
def file_to_text(self):
with open(self.filename, "r") as f:
name_list = [line.rstrip() for line in f]
return name_list
def main():
user_files = []
if os.path.isfile(sys.argv[1]):
filename = os.path.splitext(sys.argv[1])[-1].lower()
if filename.endswith('.txt'):
user_files.append(sys.argv[1])
for files in user_files:
test_name = usernames(files)
print(test_name)
for test in test_name:
print(test)
if __name__ == '__main__':
main()
python3 main.py test.txt
猫测试.txt
亚历克斯·
鲍勃
·约翰
但是出现这样的错误
TypeError: "username' object is not iterable
预期输出:
亚历克斯·
鲍勃
·约翰
解决方案
您需要提供一种__iter__
方法来使您的对象可迭代:
import os
import sys
class usernames(object):
def __init__(self, filename: str):
self.filename = filename
self.words = self.file_to_text() # <<== needs parens to call method
def file_to_text(self):
with open(self.filename, "r") as f:
name_list = [line.rstrip() for line in f]
return name_list
def __iter__(self):
for word in self.words:
yield word
def main():
user_files = ['_test_data.txt']
# if os.path.isfile(sys.argv[1]):
# filename = os.path.splitext(sys.argv[1])[-1].lower()
# if filename.endswith('.txt'):
# user_files.append(sys.argv[1])
for files in user_files:
test_name = usernames(files)
for test in test_name:
print(test)
if __name__ == '__main__':
main()
输出:
Alex
bob
John
推荐阅读
- javascript - 使用条件渲染时,如何在加载页面时渲染元素?
- gentics-mesh - 如何在模式属性中检索完整节点:节点
- android - 如何使用来自用户的输入动态制作片段(用户输入 = 片段数)
- sql - 在 INSERT 语句中使用 OUTPUT INTO 和 from_table_name
- ethereum - 使用 bytes4 参数调用合约函数会出错
- android - 在 Android AOSP 上使用 QMI 接口调制解调器设置数据连接
- android - tesseract 训练数据(tessdata_best 版本)文件在 Android 设备上不起作用
- ios - 如何在 MVVM-C RxSwift 中实现 firebase 身份验证
- java - Firebase节点为空时删除Android投票应用程序节点
- java - StringBuffer 的意义是什么,应该更频繁地使用,StringBuffer 还是 StringBuilder?