我试图解析我从字典键拉出的UTC时间戳,然后从UTC当前时间减去结果以比较它们。
然而,当我试图解析日期时,结果是TypeError,表示它必须是字符串或字符流。
当我验证Type时,它显示它实际上是一个字符串。
我做错了什么?
代码:
def check_snapshot(snapshot_timestamp):
# result = datetime.utcnow() - timestamp_formatted
# minutes = result.total_seconds() / 60
# hours = result.total_seconds() / 3600
timestamp_formatted = dateparser.parse(snapshot_timestamp).astimezone(timezone('UTC'))
print(type(snapshot_timestamp))
print(now_utc)
print(timestamp_formatted)
if ((now_utc - timestamp_formatted).total_seconds() / 3600) > 24:
return False
else:
return True
输出:
Checking backups (2022-06-02 12:08 PM)
<class 'str'>
2022-06-02 19:08:15.148078+00:00
2022-06-02 19:00:06+00:00
Traceback (most recent call last):
File "debug.py", line 303, in <module>
main()
File "debug.py", line 226, in main
backup_status = check_snapshot(snapshot_timestamp)
File "debug.py", line 83, in check_snapshot
timestamp_formatted = dateparser.parse(snapshot_timestamp).astimezone(timezone('UTC'))
File "/home/pythonuser/.local/lib/python3.8/site-packages/dateutil/parser/_parser.py", line 1374, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "/home/pythonuser/.local/lib/python3.8/site-packages/dateutil/parser/_parser.py", line 646, in parse
res, skipped_tokens = self._parse(timestr, **kwargs)
File "/home/pythonuser/.local/lib/python3.8/site-packages/dateutil/parser/_parser.py", line 725, in _parse
l = _timelex.split(timestr) # Splits the timestr into tokens
File "/home/pythonuser/.local/lib/python3.8/site-packages/dateutil/parser/_parser.py", line 207, in split
return list(cls(s))
File "/home/pythonuser/.local/lib/python3.8/site-packages/dateutil/parser/_parser.py", line 75, in __init__
raise TypeError('Parser must be a string or character stream, not '
TypeError: Parser must be a string or character stream, not NoneType
感谢@UlrichEckhardt的评论,我已经发现了根本原因。
我使用get方法从字典中提取键值(以避免抛出键错误):
last = repository['status'].get('lastBackupTime')
但是,内置方法返回一个None值。
事后看来,这不是最好的方法,因为它可以抑制其他问题,比如这个。
我练习Python的时间不长,所以我很感谢所有的帮助。
谢谢你,