为什么我的'time'类没有'tzset'属性

7 投票
3 回答
10405 浏览
提问于 2025-04-15 17:31

我的代码:

import time
print hasattr(time.tzset)#error

还有为什么有人会这样做:

if hasattr(time, 'tzset'):
            # Move the time zone info into os.environ. See ticket #2315 for why
            # we don't do this unconditionally (breaks Windows).
            os.environ['TZ'] = self.TIME_ZONE
            time.tzset()

我不太明白。

谢谢

3 个回答

2

要么你有一个本地的模块,它覆盖了原本的 time 模块,要么你使用的 Python 版本低于 2.3,或者你是在 Windows 系统上运行 Python。

3

你使用的 hasattr 方法不对。正确的写法在你第二段代码里有展示。

hasattr 需要两个参数 - 一个是对象,另一个是一个字符串,用来表示你想检查的属性。你现在的写法是,Python 会先尝试计算 time.tzset,然后再把结果传给 hasattr,这就导致了你想避免的错误。

11

请查看这个文档,里面关于tzset的说明很清楚:

可用性:Unix。

这意味着你可以在像MacOSX、Solaris或Linux这样的系统上使用它,但在Windows上是没有的。

另外,尽管你问题的标题提到了“你的时间类”,但实际上并不存在这样的东西:你想用的time是一个模块,而不是一个

最后,正如@Daniel所说,你第一次使用hasattr的方式完全错误(而你不理解的第二次使用是正确的)。

撰写回答