代码引发 OSError:[Errno 22] 使用 time() 函数时参数无效

Code raises OSError: [Errno 22] Invalid argument while using time() function

提问人:FireStorm 提问时间:10/18/2023 最后编辑:FObersteinerFireStorm 更新时间:10/18/2023 访问量:79

问:

为什么此代码返回 OSError: [Errno 22] Invalid argument?据我所知,只有当您使用与操作系统交互的函数或使用我的代码中没有的路径时,才应该提出它。

这是我的代码:

if getattr(time.localtime(), 'tm_wday') == 2:
    a = time.strptime('2023-10-17 15:20:00', '%Y-%m-%d %H:%M:%S')
    b = int(time.mktime(a))
    while True:
        y = str(getattr(time.gmtime(b - time.time()), 'tm_hour')), ':', str(
            getattr(time.gmtime(b - time.time()), 'tm_min')), ':', str(getattr(time.gmtime(b - time.time()), 'tm_sec'))
        x = ''.join(y)
        print(x, end='\r')

这是完整的错误:

Traceback (most recent call last):
  File "C:\Users\School\Desktop\final countdown.py", line 7, in <module>
    y = str(getattr(time.gmtime(b - time.time()), 'tm_hour')), ':', str(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 22] Invalid argument

我尝试在这里和那里添加一个int(),但结果是一样的。上次我尝试时代码运行良好,但现在中断了,尽管我从那以后没有对它进行任何更改。

python-3.x 日期 时间

评论

0赞 CtrlZ 10/18/2023
你确定这是你的代码吗?代码的复制粘贴(添加导入时间)不会产生任何错误。你的无限循环很有趣
0赞 FireStorm 10/18/2023
是的。正如我在帖子中所说,它以前工作正常,但今天早上坏了,尽管我没有对它进行任何修改。至于循环,我只是执行 Ctrl+C 来打破它,即使很艰难,我计划稍后使用键盘模块用 esc 打破它。
0赞 FObersteiner 10/18/2023
可能是 Python from timestamp OSError 的副本
0赞 FireStorm 10/18/2023
@FObersteiner我也这么认为,但是由于我从 time.time() 函数中获取时间,它已经以秒为单位,并将其除以 1000 将毫秒转换为秒只会进一步破坏代码。
0赞 FObersteiner 10/18/2023
我不认为这是关于毫秒与秒(这个答案完全误导恕我直言),而是关于平台上的底层 C 函数可以作为输入处理的内容。

答:

0赞 Ali Harman 10/18/2023 #1

该错误是由于将负值传递给 ,您应该更新日期和时间,以便给出正值。 不需要转换为“int”。time.gmtimetime.strptime('2023-10-18 12:00:00', '%Y-%m-%d %H:%M:%S')b - time.time()b = time.mktime(a)

0赞 FireStorm 10/18/2023 #2

经过一番修补,我发现在 time.gmtime() 函数之外执行 b-time.time() 并在 z 函数中声明它之前有效 以下是修改后的代码:

import time

if getattr(time.localtime(), 'tm_wday') == 0:
    while True:
        a = time.strptime('' + str(getattr(time.localtime(),'tm_year')) + '-' +str(getattr(time.localtime(), 'tm_mon')) + '-' + str(getattr(time.localtime(), 'tm_mday')) + ' 15:20:00', '%Y-%m-%d %H:%M:%S')
        b = int(time.mktime(a))
        z = int(b) - time.time()
        y = (str(f"{int(getattr(time.gmtime(z), 'tm_hour')):02}"),':',str(f"{int(getattr(time.gmtime(z),'tm_min')):02}"), ':',str(f{int(getattr(time.gmtime(z), 'tm_sec')):02}"))x = ''.join(y)
        print(x, end='\r')