Python属性错误:'str'对象没有'asctime'属性

-1 投票
1 回答
2980 浏览
提问于 2025-04-18 17:00

我正在用Python制作一个闹钟,但我的代码好像有问题。你能帮我看看吗?

import time
from time import localtime
from time import asctime
from time import sleep
import datetime


def Checktime():
        global time
        time = time.asctime(time.localtime(time.time()))
        return time

while True:   
    Checktime()
    print(time[11:-5])
    sleep(2)
    print("Done")

我在Idle3中遇到的错误是:

 16:40:18
    Done
    Traceback (most recent call last):
    File "C:\Python34\time test.py", line 14, in <module>
    Checktime()
    File "C:\Python34\time test.py", line 10, in Checktime
    time = time.asctime(time.localtime(time.time()))
    AttributeError: 'str' object has no attribute 'asctime'

1 个回答

2

第一次你执行

time = time.asctime(time.localtime(time.time()))

时,全球的名字 time 被绑定到了一个模块上。所以当你调用 asctime() 方法时,它会返回一个字符串,这个字符串又被绑定到了全球的名字 time 上。

下次你执行

time = time.asctime(time.localtime(time.time()))

时,全球的名字 time 就变成了一个字符串。

你应该重新考虑一下用 time 来表示两种不同的东西。建议你完全不要使用 global。一般来说,尽量避免这样做。这个函数已经返回了一个值,这样就足够了。

代码可以这样写:

import time
import datetime

def Checktime():
    return time.asctime(time.localtime(time.time()))

while True:   
    asctime = Checktime()
    print(asctime[11:-5])
    sleep(2)
    print("Done")

顺便说一下,CheckTime() 这个名字对函数来说有点弱。一个以 get 开头的名字会显得更有信息量。

撰写回答