【问题标题】:python list TypeError: 'int' object is not iterablepython list TypeError:'int'对象不可迭代
【发布时间】:2014-10-20 00:58:40
【问题描述】:

我在 python 中编写了这段代码,但它有很多错误,我希望你帮我检查一下,因为我是 python 的新手

for i in range(phones):
    pho = int(raw_input( "Phone Number %d : " % (i+1)))
    phNums.append(pho)
    for name in range(phot):
        name1 = '{0}/phone.txt'.format(pathname)
        file = open(name1, 'w')
        file.write = (pho)
        file.close()

第一个问题,当我运行脚本时出现此错误

Traceback (most recent call last):
    file.write = (pho)
AttributeError: 'file' object attribute 'write' is read-only

脚本应该做这个场景: 首先,用户给出 Perfixes 的数量和 progs 的数量 该脚本将计算它是 progs / 电话的照片 然后用户会给每个电话号码 该脚本将采用第一个数字并将其写入文件夹 1 2 3 上的文本文件“phone.txt”中,直到达到文件夹的照片数,然后移动到下一个数字并继续写入下一个文件夹数......等

请检查代码有什么问题

【问题讨论】:

  • for name in phNums[i]:更改为for name in phNums:
  • file.write 是一个函数(从技术上讲,writefile 对象的一个​​方法),因此您可以像file.write('some text') 一样调用它,将字符串some text 写入文件。但是file.write = (pho) 试图用pho 中的任何内容替换该方法,在本例中为intfile 对象足够聪明,不会让你这样做。顺便说一句,使用 file 作为您自己的变量的名称不是一个好主意,因为它是标准类的名称。

标签: python list file loops


【解决方案1】:

phNums.append(pho) 将 int 添加到您的列表 phNums,然后您尝试迭代 phNums[i],这是您列表中您无法执行的每个 int 以及您收到错误的原因。

直接遍历每个元素:

for i in phNums:
    name = '{}phone.txt'.format(i) # i is an int so use str.format to concat

或者查看您的代码,您可能想要遍历代码中未提供的名称列表。

【讨论】:

  • 错误已消失,但出现此错误 TypeError: unsupported operand type(s) for +=: 'int' and 'str'
  • i 是一个 int,所以你必须转换为字符串或使用 str.format,就像我的例子中一样
【解决方案2】:

这是一个已经得到充分回答的简单错误,所以我不想直接回答你,而是想指导你完成我的调试过程。希望这将在未来节省时间。

第一步是检查错误发生在哪里:

for name in phNums[i]:

好的,现在是什么错误?

TypeError: 'int' object is not iterable

“for”语句将遍历给定的可迭代对象,通常是这样的:

for _item_ in _iterable_

现在我们知道要查看线路的哪一部分了。 phNums[i] 是什么类型? phNums 之前被定义为一个列表,但是使用phNums[i],我们想要找到该列表中项目的类型。似乎脚本添加到列表中的唯一时间是在附加 pho 时,这是一个 int。

问题是,您正在尝试迭代一个 int 项目!这个错误现在是有道理的,但我们应该如何解决它呢?

注意:我尝试更进一步,但您的描述不清楚。您希望文件夹结构为:

1/phone.txt
2/phone.txt
3/phone.txt

phone.txt 在哪里包含每个电话号码?

【讨论】:

  • 是的,这是结构,例如,如果用户输入了这些值( progs=3 ,phones=3 ,ph 1 = 00 ,ph2 = 01 ,ph3 = 02 ),phot 将是 3/ 3 = 1 所以脚本会复制 ph1 并将其粘贴到 1/phone.txt ,然后将 ph2 复制到 2/phone.txt 。就是这个想法
  • 这对我来说仍然没有意义。你打算让phot 做什么?它在您的代码中完全未使用。
  • 您可能会遇到另一个问题,您需要先创建目录才能将文件写入其中,open 不会创建目录并打开文件(请参阅os.mkdiros.makedirs用于创建目录)。如果您在运行脚本之前创建了所有目录,这可能不是问题。
  • 明确用户是否放入 progs 10 电话 2 phot 将是 5 并且数字 ph1 将被复制到文件夹 1-5 中,这意味着 phot 是决定此文件夹数量的变量号码将被复制到
  • 所以,不是没有意义的for name in phNums,听起来你需要for name in range(phot)。不要忘记 name 将是一个 int ,它需要插入到类似于 @Padraic 的答案的文件名中
猜你喜欢
  • 2015-04-06
  • 2013-10-31
  • 2016-02-24
  • 2017-09-11
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
相关资源
最近更新 更多