Python 3.3的测试结果非常出色。
新重新设计的time模块使用get_clock_info方法获取有关平台的许多逻辑时钟的信息。 PEP 418描述了新的时间模块。
当我尝试运行PEP 418 clock_resolution.py中引用的示例程序之一时,我在下面的第54行得到TypeError: 'namespace' object is not iterable
:
46 clocks = ['clock', 'perf_counter', 'process_time']
47 if hasattr(time, 'monotonic'):
48 clocks.append('monotonic')
49 clocks.append('time')
50 for name in clocks:
51 func = getattr(time, name)
52 test_clock("%s()" % name, func)
53 info = time.get_clock_info(name)
54 if 'precision' in info:
55 print("- announced precision: %s" % format_duration(info['precision']))
56 print("- implementation: %s" % info['implementation'])
57 print("- resolution: %s" % format_duration(info['resolution']))
第53行的'info'包含:
>>> info
namespace(adjustable=True, implementation='gettimeofday()', monotonic=False, resolution=1e-06)
那么如何迭代命名空间对象呢?
答案 0 :(得分:4)
您不想迭代该对象;你只想测试一个属性的存在。两种方式:
# "easier to get forgiveness than permission" approach
try:
print(info.precision)
except AttributeError:
pass
# "look before you leap" approach
if hasattr(info, "precision"):
print(info.precision)
in
测试用于检查字典,列表,元组或其他序列中是否存在某些内容。在一般情况下,in
将尝试迭代某些内容以查找值(dict
和set
是例外; Python特殊情况下将它们用于提高效率)。但是info
是一个不支持迭代的类的实例。
如果你愿意,你可以这样做:
# alternate "look before you leap"
if "precision" in info.__dict__:
print(info.precision)
属性实际存储在名为dict
的{{1}}实例成员变量中。
编辑:@DSM写了一条评论,显示了上述的替代方案。内置函数.__dict__
将返回vars()
成员变量,因此这相当于上面的内容:
.__dict__