【问题标题】:Returning AttributeError: 'int' object has no attribute 'encode'返回 AttributeError:'int' 对象没有属性 'encode'
【发布时间】:2015-12-30 06:12:43
【问题描述】:

我遇到了一些问题,我不断收到:

AttributeError: 'int' object has no attribute 'encode'

当我运行它时。

我认为 UTF-8 会是解决这个问题的最佳选择。订阅者只会返回数字或 NoneTypes。

任何帮助将不胜感激。

import urllib2,time,csv,json,requests,urlparse,pdb



SEARCH_URL = urllib2.unquote("http://soyuz.elastic.tubularlabs.net:9200/intelligence_v2/channel_intelligence/%s")

reader = csv.reader(open('input.csv', 'r+U'), delimiter=',', quoting=csv.QUOTE_NONE)
#cookie = {"user": "2|1:0|10:1438908462|4:user|36:eyJhaWQiOiA1Njk3LCAiaWQiOiA2MzQ0fQ==|b5c4b3adbd96e54833bf8656625aedaf715d4905f39373b860c4b4bc98655e9e"}

myfile = open('accounts.csv','w')

writer = csv.writer(myfile, quoting=csv.QUOTE_MINIMAL)

processCount = 1
idsToProcess = []
for row in reader:
    if len(row)>0:
        idsToProcess.append(row[0])
#idsToProcess = ['fba_491452930867938']
for userID in idsToProcess:
#   print "fetching for %s.." % fbid
    url = SEARCH_URL % userID
    facebooksubscribers = None
    Instagramsubscribers = None
    vinesubscribers = None

    response = requests.request("GET", url)
    ret = response.json()
    titleResponse = ret['_source']['title']

    try:
        facebooksubscribers = ret['_source']['facebook']['subscribers']          
    except:
        facebooksubscribers = " "

    try:
        instagramsubscribers = ret['_source']['instagram']['subscribers']
    except:
        instagramsubscribers = " "

    try:
        vinesubscribers = ret['_source']['vine']['subscribers']
    except:
        vinesubscribers = " "



    time.sleep(0)

    row = [s.encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]]
    writer.writerow(row)

    #writer.writerow([userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers,twitterURL])

    myfile.flush()

    print u"%s,%s,%s,%s,%s,%s" % (processCount,userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers)
    processCount += 1
    #print sumEngs

    #print vidToEngs
    #print sum(vidToEngs.values())
myfile.close()
exit()

【问题讨论】:

  • 因为这些[userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers] 元素之一是 int 并且您不能对 int 执行编码操作。您可能希望在 for 循环中进行类型转换。将row = [s.encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]] 替换为row = [str(s).encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]]
  • @Pramod 你应该在你的解决方案中发布一个答案,这对我来说也是完全有效的。
  • @Pramod 感谢您的提示。我现在在这里遇到另一个错误:SyntaxError: Non-ASCII character '\xe2' in file SubscribersPullCrossPlatform.py on line 49, but no encoding declared;
  • @Waveformer 然后将# -*- coding: utf-8 -*- 放在文件的顶部。
  • @Pramod 感谢您在这里提供帮助。添加到标题后,我现在得到UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

标签: python json encoding elasticsearch


【解决方案1】:

使用这个:

repr(s).encode('utf-8')

而不是:

s.encode('utf-8')

【讨论】:

    【解决方案2】:

    因为其中之一

    [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]‌
    

    element 是 int,您不能对 int 执行编码操作。您可能希望在 for 循环中进行类型转换。替换

    row = [s.encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]]‌​
    

    row = [str(s).encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]]‌
    

    【讨论】:

    • 似乎还有一些问题。在运行像这样的脚本时,我发现编码是一个敏感区域。
    • @Waveformer 现在这是不同的问题,要调试此问题,我必须在我身边模拟您的问题。您必须查看执行编码操作的字符串中的字符类型。但请确保在进行转换时不会听到任何噪音。
    • 有趣的是,它在抛出错误之前设法做到了:1,Y30JRSgfhYXA6i6xX1erWg,Smosh,6947355,1806850,412974 Traceback (most recent call last): File "SubscribersPullCrossPlatform.py", line 51, in <module> row = [str(s).encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]] UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128) (venv)Maxs-MacBook-Pro:Leaderboard Scripts maxramsay$
    • 如果您使用 Python 2.7,请从 docs.python.org/2.7/library/csv.html 复制 UTF8Recoder 和 UnicodeWriter 的代码。它使用unicode(s, "utf-8")
    【解决方案3】:

    从 xlsx 文件加载数据时,我遇到了类似的问题。我在实施上述解决方案后遇到的问题是我会收到错误:

    AttributeError: 'int' object has no attribute 'encode'
    

    因为我解析的数据不仅仅是 unicode。我找到的解决方案是一个简单的尝试/除了如果抛出错误我只 .encode('utf-8') 。代码如下:

        try:
            s2 = str(foo)
        except:
            s2 = foo.encode('utf-8').strip()
    

    我不知道这是一次性的事情,还是其他人可能有这个问题。我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2023-02-20
      • 2019-04-21
      • 2020-07-13
      相关资源
      最近更新 更多