Skip to content

AttributeError: 'NoneType' object has no attribute 'convert' with ZoneInfo #646

Open

Description

@taosharma
  • I am on the latest Pendulum version.
  • I have searched the issues of this repo and believe that this is not a duplicate.
  • OS version and name: 4.19.128-microsoft-standard Linux
  • Pendulum version: 2.1.2

Issue

Reproducible example

import pendulum
from zoneinfo import ZoneInfo

tz = ZoneInfo("Europe/London")
my_datetime = pendulum.now()

my_datetime.astimezone(tz)  # AttributeError: 'NoneType' object has no attribute 'convert'

Description

The above error seems to be thrown when calling pendulum.astimezone() with a ZoneInfo timezone. We are in the process of migrating a project from pytz to zoneinfo. The above example works perfectly if pendulum is replaced with datetime.datetime.

Thanks for reading and looking into this!

Expected behaviour

For pendulum.astimezone() to successfully convert a datetime object with a ZoneInfo timezone.

Stack trace

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Input In [6], in <cell line: 1>()
----> 1 my_datetime.astimezone(tz)

File ~/.cache/pypoetry/virtualenvs/vidacycle_webapps-foslGWoH-py3.9/lib/python3.9/site-packages/pendulum/datetime.py:1467, in DateTime.astimezone(self, tz)
   1466 def astimezone(self, tz=None):
-> 1467     return pendulum.instance(super(DateTime, self).astimezone(tz))

File ~/.cache/pypoetry/virtualenvs/vidacycle_webapps-foslGWoH-py3.9/lib/python3.9/site-packages/pendulum/datetime.py:1443, in DateTime.__add__(self, other)
   1440 if not isinstance(other, datetime.timedelta):
   1441     return NotImplemented
-> 1443 return self._add_timedelta_(other)

File ~/.cache/pypoetry/virtualenvs/vidacycle_webapps-foslGWoH-py3.9/lib/python3.9/site-packages/pendulum/datetime.py:760, in DateTime._add_timedelta_(self, delta)
    755 elif isinstance(delta, pendulum.Duration):
    756     return self.add(
    757         years=delta.years, months=delta.months, seconds=delta._total
    758     )
--> 760 return self.add(seconds=delta.total_seconds())

File ~/.cache/pypoetry/virtualenvs/vidacycle_webapps-foslGWoH-py3.9/lib/python3.9/site-packages/pendulum/datetime.py:667, in DateTime.add(self, years, months, weeks, days, hours, minutes, seconds, microseconds)
    645     return pendulum.datetime(
    646         dt.year,
    647         dt.month,
   (...)
    653         tz=self.tz,
    654     )
    656 dt = self.__class__(
    657     dt.year,
    658     dt.month,
   (...)
    664     tzinfo=UTC,
    665 )
--> 667 dt = self.tz.convert(dt)
    669 return self.__class__(
    670     dt.year,
    671     dt.month,
   (...)
    678     fold=dt.fold,
    679 )

AttributeError: 'NoneType' object has no attribute 'convert'

Activity

  1. thinkwelltwd commented on Aug 29, 2022

    @thinkwelltwd

    I stubbed by toes hard on this bug, and here it's been fixed for 8 months. Would be supremely grateful for a new release. 🙇‍♂️

  2. muhamadBrew commented on Jul 3, 2023

    @muhamadBrew

    this happens also when upgrading Django 3.x to 4.x since Django 4.x is using zoneinfo as default timezone implementation.
    just following this to know when its fixed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions