Python基于time、datetime库实现秒表时额外输出None值问题咨询
问题根因
1. 额外输出None的原因
Python中所有没有显式写return语句的函数,执行完默认都会返回None。
你的time_convert函数内部已经用print输出了计时时长,但调用函数时写的是print(time_convert(time_lapsed)):这行代码会先执行time_convert内部的打印逻辑输出时长,再把函数返回的None传给外层的print输出,就多出了那行多余的None。
2. 导入time相关报错的原因
- 代码里用到的
time.time()是Python标准库中独立time模块的方法,和datetime模块是平级关系,不存在从属关系。 - 删掉首行
import time后,代码运行到start_time = time.time()时找不到time模块的定义,必然触发报错。 - 你尝试在
from datetime import ...行追加导入time是逻辑错误:from 模块 import xxx只能导入对应模块下的属性、类或方法,time不在datetime模块内,这种写法根本无法导入time模块,自然解决不了问题。
隐藏逻辑bug
你代码里time_ended=datetime.now()写在了程序最开头,记录的是程序刚启动的时间,不是你按下回车停止计时的时间,会导致输出的结束时间、反推的开始时间都和实际值有偏差。另外用时间差反推开始时间的写法完全没必要,计时开始时直接调用datetime.now()记录时间,精度比反推更高,也不会出现计算误差。
修正后代码
import time from datetime import datetime def time_convert(sec): mins = sec // 60 sec = sec % 60 hours = mins // 60 mins = mins % 60 # 对秒数做两位小数截断,显示更整洁 print("Time Lapsed = {0}:{1}:{2}".format(int(hours),int(mins),round(sec,2))) input("Press Enter to start") start_timestamp = time.time() time_started = datetime.now() input("Press Enter to stop") end_timestamp = time.time() time_ended = datetime.now() time_lapsed = end_timestamp - start_timestamp # 直接调用函数即可,不需要在外层套print time_convert(time_lapsed) print("Time started: ", time_started) print("Time finished: ", time_ended)
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

