Returning AttributeError: 'int' object has no attribute 'encode'
Solution 1
Use this :
repr(s).encode('utf-8')
instead of :
s.encode('utf-8')
Solution 2
because one of these
[userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]
element is int and you can't perform encode operation on int. You may want to do the type casting in your for loop. Replace
row = [s.encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]]
with
row = [str(s).encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]]
Solution 3
I had a similar issue when loading data from an xlsx file. The problem I ran into after implementing the solutions above was that I would receive the error:
AttributeError: 'int' object has no attribute 'encode'
since the data I was parsing was not just unicode. The solution I found was a simple try/except where I only .encode('utf-8') if an error gets thrown. Here is the code:
try:
s2 = str(foo)
except:
s2 = foo.encode('utf-8').strip()
I don't know if this was a one off thing or if other people might be having this issue. I hope this helps.
Waveformer
Updated on August 30, 2022Comments
-
Waveformer over 1 year
I'm having some issues with this, I keep getting:
AttributeError: 'int' object has no attribute 'encode'
When I run it.
I thought UTF-8 would be the go to for this. Subscribers will only ever return numbers, or NoneTypes.
Any help would be greatly appreciated.
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()
-
Waveformer over 8 yearsThere still seems to be some issues. I'm finding encoding to be a sensitive area when running scripts like this one.
-
Pramod over 8 years@Waveformer Now this is different issue, to debug this problem I have to simulate your problem in my side. You have to look into type of character in your string where you are performing encoding operation. But make sure while doing converstion you don't get any noise.
-
Waveformer over 8 yearsinterestingly enough it managed to do one before throwing the error:
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$
-
PeterVermont over 7 yearsIf you are using Python 2.7 copy the code for UTF8Recoder and UnicodeWriter from docs.python.org/2.7/library/csv.html. It uses
unicode(s, "utf-8")