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