好吧,这个问题可能已经在某个地方得到了回答,但我的 Google-fu 还没有找到正确的关键字组合。
我有一个接受字符串的函数,但是当我传递 None 时,Pycharm 的检查会标记类型错误。这是 linter 中的错误吗? None 算作字符串吗?我知道我可以用空字符串调用该函数,但我认为我也应该能够使用 None。
def my_func(some_str):
""" does something
Arguments:
some_str (str): a string
"""
# do something
...
my_func(None) <-- throws Expected type 'str', got 'None' instead
最佳答案
首先回答你的问题 None
不是 str
它是 type.Nonetype
的唯一值它是一个 python 内置的 Contstant .了解一下 here .
并且有很多方法可以绕过/处理可能的None
输入
<强>1。要绕过它,不要处理 None:
期待 str
所以当然会抛出错误。只需传入 ""
即可。但在这种情况下调用 my_func(None)
仍然会给您一个错误。
my_func("")
<强>2。处理可能的None
输入:
如果你想将 None
作为可能的输入参数之一,然后将你的参数设置为 optional parameter with *
这样你就可以输入None
并且不会出错
def my_func(*some_str):
或
默认您的输入为 None
如果用户传入的值不是 None
那么您知道用户传入了其他内容:这允许您对 my_func(None)
执行操作并且不会出现错误
def my_func(some_str = None):
if some_str:
#do something
注意:这也允许您平等对待 None
和 ''
(感谢 Stael 指出)
关于python - 当 docstring 需要一个字符串时,你能传递一个 None 参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45594562/