Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python +;(“str”和“None”)_Python - Fatal编程技术网

Python +;(“str”和“None”)

Python +;(“str”和“None”),python,Python,我正试着了解类型检查,我不明白为什么mypy在这里抱怨: import typing as t import os env_var_1 = os.environ.get("env_var_1") env_var_2 = os.environ.get("env_var_2") some_string = "blah" if not all([env_var_1, env_var_2]): raise ValueError(&q

我正试着了解类型检查,我不明白为什么mypy在这里抱怨:

import typing as t
import os

env_var_1 = os.environ.get("env_var_1")
env_var_2 = os.environ.get("env_var_2")
some_string = "blah"

if not all([env_var_1, env_var_2]):
    raise ValueError("Missing Vars")

print(type(env_var_1))
print(type(env_var_2))
print(env_var_1)
print(env_var_2)

def type_test(env_var_1: t.Optional[str], env_var_2: t.Optional[str]) -> None:
    print(some_string + env_var_1, env_var_2)

type_test(env_var_1, env_var_2)
代码运行正常,以下是输出:

<class 'str'>
<class 'str'>
ABC
XYZ
blahABC XYZ

这个错误对我来说没有意义,因为类型不是“None”,而是字符串。。。我错过了什么?

这样做让mypy很开心。。。不确定这是否是一个好方法

import typing as t
import os

env_var_1 = os.environ.get("env_var_1","") ##change here
env_var_2 = os.environ.get("env_var_2","") ##change here
some_string = "blah"

if not all([env_var_1, env_var_2]):
    raise ValueError("Missing Vars")

def type_test(some_string: str, env_var_1: str) -> None:
    print(some_string + env_var_1, env_var_2)

type_test(some_string, env_var_1)

添加不处理env_var_1为None的情况(例如,如果未在环境变量中定义它),因为
env_var_1
env_var_2
都可以是
None
。如果其中一个(或两个)都不是,那么您的代码将出错,mypy正确地捕捉到了这一点。你必须处理这些情况。如果你不知道,类型
Optional[str]
与类型
Union[str,None]
相同。因此,其他评论;您已经告诉mypy类型可能是
None
。对,这就是为什么我要在代码前面检查
(如果不是全部的话)
。@Nathan啊,我明白了,这是有道理的。那么我应该在这里做些什么来让mypy开心呢?
import typing as t
import os

env_var_1 = os.environ.get("env_var_1","") ##change here
env_var_2 = os.environ.get("env_var_2","") ##change here
some_string = "blah"

if not all([env_var_1, env_var_2]):
    raise ValueError("Missing Vars")

def type_test(some_string: str, env_var_1: str) -> None:
    print(some_string + env_var_1, env_var_2)

type_test(some_string, env_var_1)