problem with eval and time

Discussion in 'Python' started by Wincent, Nov 6, 2012.

  1. Wincent

    Wincent Guest

    Dear all, I would like to convert tstr to representation of time, but encounter the following error. Is there a simple way to get what I want? Thanks.

    >>> import time
    >>> tstr = str(time.localtime())
    >>> eval(tstr)

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<string>", line 1, in <module>
    TypeError: structseq() takes at most 2 arguments (9 given)
    >>> sys.version

    '2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]'

    Wincent
    Wincent, Nov 6, 2012
    #1
    1. Advertising

  2. Wincent

    alex23 Guest

    On Nov 6, 1:32 pm, Wincent <> wrote:
    > Dear all, I would like to convert tstr to representation
    > of time, but encounter the following error. Is there a
    > simple way to get what I want? Thanks.
    >
    > >>> import time
    > >>> tstr = str(time.localtime())
    > >>> eval(tstr)

    >
    > Traceback (most recent call last):
    >   File "<stdin>", line 1, in <module>
    >   File "<string>", line 1, in <module>
    > TypeError: structseq() takes at most 2 arguments (9 given)>>> sys.version


    The problem is that the repr of `time.struct_time` isn't its
    constructor, so you won't be able to do this without parsing the
    string, I believe.

    What are you trying to achieve here? You already have a
    time.struct_time object, why turn it into a string if what you want is
    the object?

    If you're wanting to pass time values around as strings, maybe
    `time.strptime` will be more useful.
    alex23, Nov 6, 2012
    #2
    1. Advertising

  3. Wincent

    Wincent Guest

    Thanks.

    I fetch data from social networking sites and want to mark the time of access. I store all the information in a redis database, which converts everything into strings and I need to convert those strings back to original python objects when analyzing the data.

    Best Regards

    On Tuesday, November 6, 2012 12:22:44 PM UTC+8, alex23 wrote:
    > On Nov 6, 1:32 pm, Wincent <> wrote:
    >
    > > Dear all, I would like to convert tstr to representation

    >
    > > of time, but encounter the following error. Is there a

    >
    > > simple way to get what I want? Thanks.

    >
    > >

    >
    > > >>> import time

    >
    > > >>> tstr = str(time.localtime())

    >
    > > >>> eval(tstr)

    >
    > >

    >
    > > Traceback (most recent call last):

    >
    > >   File "<stdin>", line 1, in <module>

    >
    > >   File "<string>", line 1, in <module>

    >
    > > TypeError: structseq() takes at most 2 arguments (9 given)>>> sys.version

    >
    >
    >
    > The problem is that the repr of `time.struct_time` isn't its
    >
    > constructor, so you won't be able to do this without parsing the
    >
    > string, I believe.
    >
    >
    >
    > What are you trying to achieve here? You already have a
    >
    > time.struct_time object, why turn it into a string if what you want is
    >
    > the object?
    >
    >
    >
    > If you're wanting to pass time values around as strings, maybe
    >
    > `time.strptime` will be more useful.
    Wincent, Nov 6, 2012
    #3
  4. On Tue, Nov 6, 2012 at 3:29 PM, Wincent <> wrote:
    > Thanks.
    >
    > I fetch data from social networking sites and want to mark the time of access. I store all the information in a redis database, which converts everything into strings and I need to convert those strings back to original python objects when analyzing the data.


    The easiest way, imho, is to store Unix times - simply the number of
    seconds since 1970, as an integer or float. That can easily and safely
    be turned into a string and back (floats might lose a little accuracy,
    depending on how you do it, but the difference will be a small
    fraction of a second).

    >>> time.time()

    1352176547.787
    >>> time.gmtime(1352176547.787)

    time.struct_time(tm_year=2012, tm_mon=11, tm_mday=6, tm_hour=4,
    tm_min=35, tm_sec=47, tm_wday=1, tm_yday=311, tm_isdst=0)

    Easy and unambiguous. Also compact, which may or may not be a selling point..

    ChrisA
    Chris Angelico, Nov 6, 2012
    #4
  5. On Mon, 5 Nov 2012 19:32:41 -0800 (PST), Wincent
    <> declaimed the following in
    gmane.comp.python.general:

    > Dear all, I would like to convert tstr to representation of time, but encounter the following error. Is there a simple way to get what I want? Thanks.
    >

    Well... you don't show an example of "what I want"...

    > >>> import time
    > >>> tstr = str(time.localtime())


    Did you look at what you are doing there?

    >>> import time
    >>> time.localtime()

    time.struct_time(tm_year=2012, tm_mon=11, tm_mday=5, tm_hour=23,
    tm_min=38, tm_sec=16, tm_wday=0, tm_yday=310, tm_isdst=0)
    >>> str(time.localtime())

    'time.struct_time(tm_year=2012, tm_mon=11, tm_mday=5, tm_hour=23,
    tm_min=40, tm_sec=22, tm_wday=0, tm_yday=310, tm_isdst=0)'
    >>>


    You've created a struct_time object, then turned that into a string
    representation.

    > >>> eval(tstr)

    > Traceback (most recent call last):
    > File "<stdin>", line 1, in <module>
    > File "<string>", line 1, in <module>
    > TypeError: structseq() takes at most 2 arguments (9 given)


    Now you are trying to evaluate that string representation. But the
    constructor form uses a /tuple/ of values...

    >>> time.struct_time((2012, 11, 5, 23, 47, 32, 0, 310, 0))

    time.struct_time(tm_year=2012, tm_mon=11, tm_mday=5, tm_hour=23,
    tm_min=47, tm_sec=32, tm_wday=0, tm_yday=310, tm_isdst=0)
    >>>


    .... not a bunch of position/keyword arguments.

    I'd consider it a wart -- commonly the representation is valid for
    reconstructing the data...

    >>> time.mktime((2012, 11, 5, 23, 47, 32, 0, 310, 0))

    1352177252.0
    >>> t2 = time.localtime()
    >>> t2

    time.struct_time(tm_year=2012, tm_mon=11, tm_mday=6, tm_hour=0,
    tm_min=3, tm_sec=52, tm_wday=1, tm_yday=311, tm_isdst=0)
    >>> time.mktime(t2)

    1352178232.0
    >>>


    But really, what do you mean by "representation of time"?

    >>> time.asctime()

    'Tue Nov 06 00:05:39 2012'
    >>>

    --
    Wulfraed Dennis Lee Bieber AF6VN
    HTTP://wlfraed.home.netcom.com/
    Dennis Lee Bieber, Nov 6, 2012
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Eric Newton
    Replies:
    3
    Views:
    9,378
    Brock Allen
    Apr 4, 2005
  2. DataBinder.Eval and Eval.

    , Jun 16, 2006, in forum: ASP .Net
    Replies:
    1
    Views:
    538
    Karl Seguin [MVP]
    Jun 16, 2006
  3. flamesrock
    Replies:
    8
    Views:
    449
    Hendrik van Rooyen
    Nov 24, 2006
  4. Alex van der Spek

    eval('07') works, eval('08') fails, why?

    Alex van der Spek, Jan 8, 2009, in forum: Python
    Replies:
    6
    Views:
    1,425
    Bruno Desthuilliers
    Jan 8, 2009
  5. Liang Wang
    Replies:
    8
    Views:
    128
    Ben Morrow
    Feb 2, 2008
Loading...

Share This Page