Pytz error: unpack requires a string argument of length 44
bringa at gmail.com
bringa at gmail.com
Wed Jun 13 17:59:02 EDT 2012
Thanks Terry!
There indeed seems to be something wrong with my installation of pytz. I had a look around the zoneinfo dir, which is where build_tzinfo polls its info from, and a whole bunch of files are 0 bytes. Whenever I try to instantiate a timezone whose corresponding file is 0 bytes I get that error (it's trying to read the head of the tzinfo file to make sure the right magic bytes are in there, and reading 44 bytes out of a 0 byte file isn't going to work).
So I guess I'll poke around to find some specific help with pytz or a non-broken zoneinfo dir.
On Wednesday, June 13, 2012 10:43:46 PM UTC+1, Terry Reedy wrote:
> On 6/13/2012 4:55 PM, I wrote:
> > Hi!
> >
> > I'm trying to get a handle on pytz (http://pytz.sourceforge.net/). I don't have root on the system I'll be running my script on, so I need to go for a local installation. I copied pytz into a folder in my sys.path and am importing from there. That part seems to work. I downloaded the tarball on http://pypi.python.org/pypi/pytz/#downloads
> >
> > So now I'm walking through the examples on http://pytz.sourceforge.net/#example-usage. This is what happens:
> >
> > Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
> > Type "help", "copyright", "credits" or "license" for more information.
> > (InteractiveConsole)
> >>>> from datetime import datetime, timedelta
> >>>> from pytz import timezone
> >>>> import pytz
> >>>> utc = pytz.utc
> >>>> utc.zone
> > 'UTC'
> >>>> eastern = timezone('US/Eastern')
> > Traceback (most recent call last):
> > File "<console>", line 1, in<module>
> > File "C:\code\SoF\serversonfire\pytz\__init__.py", line 181, in timezone
> > _tzinfo_cache[zone] = build_tzinfo(zone, fp)
> > File "C:\code\SoF\serversonfire\pytz\tzfile.py", line 30, in build_tzinfo
> > typecnt, charcnt) = unpack(head_fmt, fp.read(head_size))
> > error: unpack requires a string argument of length 44
> >
> >
> > Can anyone explain to me why that call fails?
>
> 1. Either pytz has a bug, it was not installed correctly, or it does not
> work on windows.
>
> 2. If you read the module struct section of the fine manual, which you
> can easily find by typing 'unpack' on the Index tab of the Windows help
> version of the manual, it will tell you the following. Unpack takes two
> arguments, a format defining character fields of specifics lengths and a
> string whose length must be the sum of those lengths. (The contents of
> each field must also match the format spec, but you never got that far.)
> If there is a length mismatch, you get the message above.
>
> 3. In the specific case, we may presume that head_size is the sum of
> field lengths for head_fmt. (You could check; if not, that is a bug.)
> Since fp.read cannot read too many bytes, it must have read too little.
> ("Read up to n bytes from the object and return them.")
>
> You could look in
> C:\code\SoF\serversonfire\pytz\__init__.py
> and see what file fp is supposed to be and then take a look at the file.
> Is it empty? Is anything read before the statement that failer?
>
> --
> Terry Jan Reedy
More information about the Python-list
mailing list