【问题标题】:why isn't my loop running when the data gets converted to array?为什么当数据转换为数组时我的循环没有运行?
【发布时间】:2020-12-12 17:50:15
【问题描述】:
   filename = "list.txt"
# in list.txt file seperate package name on next line to generate string

def splitter():
    with open(filename) as f:
      lines = f.read().splitlines()
      list = print(lines)
      return list

usrInput = input("Enter 1 for install or 2 for Uninstall list: ")

if usrInput == 1 :
  splitter()
  for ele in list:
    print('adb install "apk/%s.apk" > CON'%ele)

else:   
  splitter();
  for ele in list:
    print('adb shell "pm uninstall --user 0 %s" > CON'%ele)

在这种情况下,我有一个名为 list.txt 的文件,其中每个单独的文件都写入了一个包名。 spitter 函数可以轻松地将所有包转换为数组,但随后会显示错误:TypeError: 'type' object is not iterable。我希望循环工作并将数据打印到单独的行。

【问题讨论】:

标签: python python-3.x loops for-loop


【解决方案1】:

您没有将 splitter 的返回值分配给函数之外的任何内容。您需要做的是在循环枚举中使用函数调用,例如for ele in splitter()。另外,尽量避免使用 Python 的保留名称,如 list 作为变量名。

【讨论】:

    【解决方案2】:

    首先不要为变量使用像list 这样的名称,因为它们是built-ins。其次,当您 return 函数中的某些内容时,您需要将其分配给一个变量以跟踪它。

    实际上,在这种情况下,您不需要变量:

    def splitter(filename):
        with open(filename) as f:
          return f.read().splitlines()
    
    # in list.txt file separate package name on next line to generate string
    filename = "list.txt"
    usrInput = input("Enter 1 for install or 2 for Uninstall list: ")
    
    if usrInput == '1':
      for ele in splitter(filename):
        print('adb install "apk/%s.apk" > CON' % ele)
    else:   
      for ele in splitter(filename):
        print('adb shell "pm uninstall --user 0 %s" > CON' % ele)
    

    此外,您的错误消息来自:for ele in list:,如果将 list 称为类型或内置。

    【讨论】:

      猜你喜欢
      • 2015-02-06
      • 2022-10-16
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2018-03-27
      • 2014-07-03
      相关资源
      最近更新 更多