Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

I having trouble passing a function as a parameter to another function. This is my code:

ga.py:

def display_pageviews(hostname):     pageviews_results = get_pageviews_query(service, hostname).execute()     if pageviews_results.get('rows', []):         pv = pageviews_results.get('rows')         return pv[0]     else:         return None   def get_pageviews_query(service, hostname):       return service.data().ga().get(         ids=VIEW_ID,         start_date='7daysAgo',         end_date='today',         metrics='ga:pageviews',         sort='-ga:pageviews',         filters='ga:hostname==%s' % hostname,) 

models.py:

class Stats(models.Model):     user = models.OneToOneField('auth.User')     views = models.IntegerField()     visits = models.IntegerField()     unique_visits = models.IntegerField() 

updatestats.py:

class Command(BaseCommand):      def handle(self, *args, **options):         users = User.objects.all()         try:             for user in users:                 hostname = '%s.%s' % (user.username, settings.NETWORK_DOMAIN)                 stats = Stats.objects.update_or_create(                     user=user,                     views=display_pageviews(hostname),                     visits=display_visits(hostname),                     unique_visits=display_unique_visits(hostname),)         except FieldError:             print ('There was a field error.') 

When I run this: python manage.py updatestats I get the error:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

I don't know what's causing this. I've tried converting it to a string, but I get the same error. Any ideas?

Full traceback:

Traceback (most recent call last):   File "manage.py", line 20, in <module>     execute_from_command_line(sys.argv)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line     utility.execute()   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/core/management/__init__.py", line 345, in execute     self.fetch_command(subcommand).run_from_argv(self.argv)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv     self.execute(*args, **cmd_options)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/core/management/base.py", line 399, in execute     output = self.handle(*args, **options)   File "/Users/myusername/project/Dev/project_files/project/main/management/commands/updatestats.py", line 23, in handle     unique_visits=display_unique_visits(hostname),)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/manager.py", line 122, in manager_method     return getattr(self.get_queryset(), name)(*args, **kwargs)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/query.py", line 480, in update_or_create     obj = self.get(**lookup)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/query.py", line 378, in get     clone = self.filter(*args, **kwargs)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/query.py", line 790, in filter     return self._filter_or_exclude(False, *args, **kwargs)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/query.py", line 808, in _filter_or_exclude     clone.query.add_q(Q(*args, **kwargs))   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1243, in add_q     clause, _ = self._add_q(q_object, self.used_aliases)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1269, in _add_q     allow_joins=allow_joins, split_subq=split_subq,   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1203, in build_filter     condition = self.build_lookup(lookups, col, value)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1099, in build_lookup     return final_lookup(lhs, rhs)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/lookups.py", line 19, in __init__     self.rhs = self.get_prep_lookup()   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/lookups.py", line 57, in get_prep_lookup     return self.lhs.output_field.get_prep_lookup(self.lookup_name, self.rhs)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 1860, in get_prep_lookup     return super(IntegerField, self).get_prep_lookup(lookup_type, value)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 744, in get_prep_lookup     return self.get_prep_value(value)   File "/Users/myusername/project/Dev/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 1854, in get_prep_value     return int(value) TypeError: int() argument must be a string, a bytes-like object or a number, not 'list' 

Edit:

Alright, I understand what the issue is. I used the shell to get the type of function output:

>>> type(display_pageviews('test.domain.com')) <class 'list'> 

I tried with this but it is still considered as a list:

pv = pageviews_results.get('rows')[0]     return pv 
like image 295
Urdro Avatar asked Aug 08 '16 19:08

Urdro


People also ask

How do you fix TypeError INT () argument must be a string a bytes like object or a number not list?

The Python "TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'" occurs when we pass a list to the int() class. To solve the error, access a specific item in the list and pass the item to the int() class, e.g. int(my_list[0]) .

How do you use int in Python?

To convert a string to integer in Python, use the int() function. This function takes two parameters: the initial string and the optional base to represent the data. Use the syntax print(int("STR")) to return the str as an int , or integer.

What does int object is not Subscriptable?

Python TypeError: 'int' object is not subscriptableThis error occurs when you try to use the integer type value as an array. In simple terms, this error occurs when your program has a variable that is treated as an array by your function, but actually, that variable is an integer.


1 Answers

What the error is telling, is that you can't convert an entire list into an integer. You could get an index from the list and convert that into an integer:

x = ["0", "1", "2"]  y = int(x[0]) #accessing the zeroth element 

If you're trying to convert a whole list into an integer, you are going to have to convert the list into a string first:

x = ["0", "1", "2"] y = ''.join(x) # converting list into string z = int(y) 

If your list elements are not strings, you'll have to convert them to strings before using str.join:

x = [0, 1, 2] y = ''.join(map(str, x)) z = int(y) 

Also, as stated above, make sure that you're not returning a nested list.

like image 126
Christian Dean Avatar answered Oct 05 '22 18:10

Christian Dean