在python中解决迭代类型错误

在python中解决迭代类型错误,python,typeerror,Python,Typeerror,我制作了一些文本文件,其格式如下: ['number', 'number', 'number'] number number number 但是,我的某些文件仅包含以下内容: ['number', 'number', 'number'] 当我运行当前代码(如下所示)时,它遇到如下文件时,会出现以下错误: Traceback (most recent call last): File "product_1digcon1.py", line 879, in <module>

我制作了一些文本文件,其格式如下:

['number', 'number', 'number']
number
number
number
但是,我的某些文件仅包含以下内容:

['number', 'number', 'number']
当我运行当前代码(如下所示)时,它遇到如下文件时,会出现以下错误:

Traceback (most recent call last):
  File "product_1digcon1.py", line 879, in <module>
    punch_it()
  File "product_1digcon1.py", line 875, in punch_it
    last()
  File "product_1digcon1.py", line 742, in last
    finale()
  File "product_1digcon1.py", line 775, in finale
    for value, line in zip(values, fh):
TypeError: zip argument #1 must support iteration

如有任何帮助,将不胜感激。

如果为真,请尝试:

if values and th:
    for value, line in zip(values, th):
        first_column = line.strip()
        fh_out.write("%s\n" % (first_column))

如果为True,请尝试以下操作,而不是

if values and th:
    for value, line in zip(values, th):
        first_column = line.strip()
        fh_out.write("%s\n" % (first_column))

您可以使用hasattr函数检查对象是否支持迭代,该函数将检查魔法方法iter。基本上,它将返回一个bool,关于对象是否支持迭代,因此如果它不支持,您将不会迭代它。下面是您的代码示例,已修改为不对iterable执行任何操作:

if hasattr(values,"__iter__"):                   #this checks if values is iterable
    for value, line in zip(values, th):
        first_column = line.strip()
        fh_out.write("%s\n" % (first_column))
else:
    pass    #if you want to do anything if the object does not support iteration, do it here

这应该是您想要的,它比异常处理更干净、更简洁。

您可以使用hasattr函数检查对象是否支持迭代,该函数将检查魔法方法iter。基本上,它将返回一个bool,关于对象是否支持迭代,因此如果它不支持,您将不会迭代它。下面是您的代码示例,已修改为不对iterable执行任何操作:

if hasattr(values,"__iter__"):                   #this checks if values is iterable
    for value, line in zip(values, th):
        first_column = line.strip()
        fh_out.write("%s\n" % (first_column))
else:
    pass    #if you want to do anything if the object does not support iteration, do it here

这应该是您想要的,而且它比异常处理更干净、更简洁。

如前所述,您的缩进是错误的。您混合了制表符和空格。发布时,缩进错误。您混合了制表符和空格。由于
hasattr
的第二个参数采用字符串,因此需要在
\uuuu iter\uuuu
周围加引号。另外,并不是所有迭代器都有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。对于字符串中的迭代,您也可以使用type()检查类型以避免使用异常,尽管这可能会很繁琐。或者只需
try/catch
。Python毕竟是duck类型的。Try-catch当然是最简单的方法,但是避免它们通常是很好的,因为您通常尝试测试迭代之类的东西,而不是试图以这种方式处理某一类型的所有可能的错误。对于这种情况,避免“尝试并捕获”可能会变得复杂,但如果这是一个大型程序,则最好在不需要时编写它而不进行太多错误处理。由于
的第二个参数hasattr
采用字符串,因此需要在
的前后加引号。另外,并不是所有迭代器都有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。对于字符串中的迭代,您也可以使用type()检查类型以避免使用异常,尽管这可能会很繁琐。或者只需
try/catch
。Python毕竟是duck类型的。Try-catch当然是最简单的方法,但是避免它们通常是很好的,因为您通常尝试测试迭代之类的东西,而不是试图以这种方式处理某一类型的所有可能的错误。对于这种情况,避免try-and-catch可能会变得很复杂,但是如果这是一个大型程序,那么在不需要时最好在不进行太多错误处理的情况下编写它。