Helpex - Trao đổi & giúp đỡ Đăng nhập
34

Tôi gặp sự cố khi truyền một hàm dưới dạng tham số cho một hàm khác. Đây là mã của tôi:

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.')

Khi tôi chạy cái này: python manage.py updatestatsTôi gặp lỗi:

TypeError: đối số int () phải là một chuỗi, một đối tượng giống byte hoặc một số, không phải là 'danh sách'

Tôi không biết điều gì gây ra điều này. Tôi đã thử chuyển đổi nó thành một chuỗi, nhưng tôi gặp lỗi tương tự. Có ý kiến ​​gì không?

Theo dõi đầy đủ:

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'

Biên tập:

Được rồi, tôi hiểu vấn đề là gì. Tôi đã sử dụng shell để lấy kiểu đầu ra của hàm:

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

Tôi đã thử với điều này nhưng nó vẫn được coi là một danh sách:

pv = pageviews_results.get('rows')[0]
    return pv
34 hữu ích 4 bình luận 260k xem chia sẻ
38

Lỗi đang nói ở đây là bạn không thể chuyển đổi toàn bộ danh sách thành một số nguyên. Bạn có thể lấy một chỉ mục từ danh sách và chuyển đổi nó thành một số nguyên:

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

Nếu bạn đang cố gắng chuyển đổi toàn bộ danh sách thành một số nguyên, trước tiên bạn sẽ phải chuyển đổi danh sách thành một chuỗi:

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

Nếu các phần tử danh sách của bạn không phải là chuỗi, bạn sẽ phải chuyển đổi chúng thành chuỗi trước khi sử dụng str.join:

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

Ngoài ra, như đã nêu ở trên, hãy đảm bảo rằng bạn không trả về một danh sách lồng nhau.

38 hữu ích 2 bình luận chia sẻ
0

Đối số int () phải là một chuỗi, một đối tượng giống byte hoặc một số, không phải là 'NoneType'

Theo lỗi, bạn không thể chuyển đổi dữ liệu kiểu chuỗi thành số nguyên, Vì vậy, nếu một cột chứa giá trị null là NaN thì kiểu NaN là float, vì vậy bạn có thể chuyển đổi dữ liệu đó thành float.

kiểm tra loại NaN -> loại (np.NaN) ==> float

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ python django python-3.x , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading