luofeiyu <elearn2...@gmail.com> writes: > >>> tz1 > <DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD> > >>> repr(tz1) > "<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>"
Yes. Remember that ‘repr’ is for the benefit of the programmer, and there is no promise of what it contains. > >>> x=repr(tz1) > >>> x > "<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>" > >>> import re > >>> re.search("LMT.+\s",x).group() > 'LMT+8:06:00 ' This is wildly fragile. The ‘repr’ output depends on unpublished attributes: implementation details not part of the API which therefore can change without notice. You're then parsing a free-form string assuming that it will contain a structure for the data you want. All of those assumptions are subject to change without notification, and the result would be a bug in your code, not the library. At the least: Reduce the number of fragile links in that chain. If you want access to unpublished attributes, then simply access them directly. >>> import pytz >>> tz1 = pytz.timezone("Asia/Shanghai") >>> (zone_name, tzname, utcoffset, is_dst) = (tz1.zone, tz1._tzname, tz1._utcoffset, tz1._dst) >>> zone_name, tzname, utcoffset, is_dst ('Asia/Shanghai', 'CST', datetime.timedelta(0, 28800), datetime.timedelta(0)) Then use those values however you like. The values will still be subject to change without notice. But at least you'll avoid parsing structured data from a string, and you'll avoid whatever quirks go into the ‘repr’ output. -- \ “The difference between a moral man and a man of honor is that | `\ the latter regrets a discreditable act, even when it has worked | _o__) and he has not been caught.” —Henry L. Mencken | Ben Finney -- https://mail.python.org/mailman/listinfo/python-list