相关疑难解决方法(0)

键入一个函数永远不会返回的提示

Python的新类型提示功能允许我们输入函数返回的提示None...

def some_func() -> None:
    pass
Run Code Online (Sandbox Code Playgroud)

...或者保留未指定的返回类型,PEP规定应该使静态分析器假定任何返回类型都是可能的:

任何没有注释的函数都应该被视为具有最普遍的类型

但是,我应该如何键入一个函数永远不会返回的提示?例如,键入提示这两个函数的返回值的正确方法是什么?

def loop_forever():
    while True:
        print('This function never returns because it loops forever')

def always_explode():
    raise Exception('This function never returns because it always raises')
Run Code Online (Sandbox Code Playgroud)

-> None在这些情况下,指定或保留未指定的返回类型似乎都不正确.

python type-hinting

17
推荐指数
2
解决办法
1616
查看次数

从带mypy注释的python函数返回None,多种返回类型

我来自打字稿背景。我正在将静态类型检查引入到我正在研究的python项目中(使用mypy)。

在Typescript中,从带有注释以返回其他内容(例如字符串)的函数中返回null是有效的:

function test(flag: boolean): string {
    if(flag) {
        return 'success';
    } else {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

对函数进行注释以使其具有多种潜在的返回类型(例如字符串或布尔值)也是有效的:

function test(flag: boolean): string | boolean {
    if(flag) {
        return 'success';
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在使用mypy的python中,不允许从注释为return的函数返回None str

def test(flag: bool) -> str:
    if flag:
        return 'success'
    else:
        return None
        # [mypy] error:Incompatible return value type (got "None", expected "str")
Run Code Online (Sandbox Code Playgroud)

此外,我看不到注释多种返回类型的方法,即str | None

我应该如何使用mypy处理类似的事情?从错误状态返回None的函数遍布我的代码库。

python static-typing function return-type mypy

8
推荐指数
1
解决办法
1476
查看次数

typehints - >无或留空

使用python 3,可以选择使用typehints.

我的问题是,如果一个函数返回None,应该添加一个,还是留空.

def hint(p:str) -> None:
    pass

def no_hint(p:str):
    pass
Run Code Online (Sandbox Code Playgroud)

哪个PEP解决了这个问题?

python python-3.x typehints

7
推荐指数
1
解决办法
265
查看次数

输入提示返回,返回无,根本不返回?

这三个函数的返回类型提示有什么区别吗?

def my_func1():
    print("Hello World")
    return None

def my_func2():
    print("Hello World")
    return

def my_func3():
    print("Hello World")
Run Code Online (Sandbox Code Playgroud)

它们是否都应该有-> None返回类型提示,因为这就是它们实际上显式或隐式返回的内容?或者应该my_func2my_func3实际上没有返回类型提示?

这个问题的动机是这个问题这个很好的答案,以及我正在学习Type Hints的事实。

python type-hinting python-typing

7
推荐指数
2
解决办法
1439
查看次数

不返回值的 Python 函数的签名中是否应该包含 `-> None` ?

当在 Python 中编写不返回值的类型化函数(如其他语言中的“void”)时,最好和/或按惯例将其标记如下吗?

def say_hello(name: str) -> None
    print(f"Hello, {name}.")
Run Code Online (Sandbox Code Playgroud)

或者,应该省略-> None?

def say_hello(name: str)
Run Code Online (Sandbox Code Playgroud)

我想我要问的是,-> None省略是否会导致返回类型未指定,或者无论如何都被认为是NoneType这样,因此没有必要?

python mypy

1
推荐指数
1
解决办法
2185
查看次数