Skip to main content
 首页 » 编程设计

python之类型提示返回 NameError : name 'datetime' not defined

2025年05月04日15落叶

我下面有这个功能;

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

请您参考如下方法:

您需要导入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/