TypeError: Parser必须是字符串或字符流,而不是NoneType



我试图解析我从字典键拉出的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的时间不长,所以我很感谢所有的帮助。

谢谢你,

最新更新