python-3.x 类型提示返回名称错误:名称'datetime'未定义

gj3fmq9x  于 2023-01-03  发布在  Python
关注(0)|答案(2)|浏览(153)

我下面有这个函数;

def time_in_range(start, end, x):
    """Return true if x is in the range [start, end]"""
    if start <= end:
        return start <= x <= end
    else:
        return start <= x or x <= end

函数参数都是datetime类型的,我想给函数增加键入提示,这就是我所做的;

def time_in_range(start: datetime, end: datetime, x: datetime) -> bool:
    """Return true if x is in the range [start, end]"""
    if start <= end:
        return start <= x <= end
    else:
        return start <= x or x <= end

我得到了错误NameError: name 'datetime' is not defined。为这个函数添加类型的正确方法是什么?
我使用的是python v3.7

vuktfyat

vuktfyat1#

您需要导入datetime,或者使用一个字符串(记住,这只是一个提示)。

>>> def f(x: datetime):
...     pass
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'datetime' is not defined
>>> def f(x: 'datetime'):
...     pass
...
>>>
>>> from datetime import datetime
>>> def f(x: datetime):
...     pass
...
>>>

Python 3.7.4语言

更新。对于此问题的稍微不同的版本,请导入__future__.annotations

from __future__ import annotations

def f(dto: Dto):
    pass

class Dto:
    pass

否则在引用Dto类的函数中会失败。Python4将此作为默认行为。现在,import必须是文件的第一条语句。
在Python 3.8.10中测试。
参见:https://peps.python.org/pep-0563/

klsxnrf1

klsxnrf12#

import datetime并使用datetime.datetime作为提示,或者from datetime import datetime并使用datetime作为提示。

相关问题