for循环中的Python变量返回TypeError

时间:2011-10-19 07:52:47

标签: python

我正在调用一个函数,需要遍历一个范围,为该范围内的每个值调用该函数。最大值由不同的函数(findPageCount())返回,而不是我遇到问题的函数。

对于MakeRequest(),我可以使用硬编码的值运行它,它可以正常工作。当我添加for循环并将整数传递给函数的两行时,我在底部列出了错误。我认为这是一个小的格式差异,但到目前为止我还没有成功跟踪它。

目标是将for循环中的i值传递到xml字符串中的请求中,以便显示下一页并进入f = open语句,以便为该页面创建新文件。

感谢您提供的任何帮助。

def MakeRequest(i):
  # some code to call api removed
  xml_string = "<list><FilterItems><FilterItem attribute='pageNumber' value='%d' /></FilterItems><SortItems><SortItem attribute ='activity_aud_mem_id' sortOrder='0'/></SortItems></list>"   % i

  f = open('/Users/output_test_%d.txt', 'w') % i
  for line in r:
      try:
          f.write('%s\n' % line)
      except UnicodeEncodeError:
          pass

  f.close()

max_page = findPageCount()

for i in range(0, max_page): 
  MakeRequest(i);  

我在f =开放行时收到以下错误。

TypeError: "unsupported operand type(s) for %: 'file' and 'int'"

2 个答案:

答案 0 :(得分:6)

使用此:

f = open('/Users/output_test_%d.txt' % i, 'w')

字符串格式化程序操作符%适用于前面的字符串,因此您必须将其直接放在后面。

我建议像这样重新格式化整个块:

with open('/Users/output_test_%d.txt' % i, 'w') as f:
    for line in r:
        try:
            f.write('%s\n' % line)
        except UnicodeEncodeError:
            pass

然后你不需要f.close()

答案 1 :(得分:3)

疯狂猜测而不测试它:

f = open('/Users/output_test_%d.txt'  % i , 'w')