TypeError : "username '개체는 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

고양이 test.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

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관