如何在Python函数中正确使用time.sleep()?解决自定义wait函数的AttributeError问题
解决AttributeError: 'int' object has no attribute 'sleep'的问题
嘿,这个坑我刚入门Python的时候也踩过!咱们来一步步捋清楚问题出在哪,以及怎么解决:
问题原因
你自定义的wait函数参数名用了time,这直接和你导入的time模块重名了!在函数内部,局部作用域里的time(也就是你调用wait(1)时传入的整数1)会覆盖全局作用域里的time模块。这时候你再调用time.sleep(time),其实是在尝试对整数1调用sleep方法——整数哪有这个方法呀,自然就抛出AttributeError了。
两种解决方法
方法1:修改函数参数名(推荐)
最简单的方式就是把参数名改成和模块名不冲突的名字,比如delay或者seconds:
import time def wait(delay): time.sleep(delay) wait(1) # 现在就能正常延迟1秒啦
方法2:给模块起别名
如果你特别想用time当参数名,也可以给导入的time模块起个别名,避免冲突:
import time as t def wait(time): t.sleep(time) wait(1)
小提示
以后写代码的时候,尽量别用Python内置模块名、内置函数名(比如list、str、print这些)当变量名或者参数名,不然很容易出现这种“变量覆盖”导致的奇怪错误,排查起来还挺费时间的~
内容的提问来源于stack exchange,提问作者some_user_3
相关产品推荐
相关产品推荐

