当 docstring 需要一个字符串时,你能传递一个 None 参数吗?
Can you pass a None argument when docstring requires a string?
好的,这个问题可能已经在某个地方得到了回答,但是我的 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 内置常量。阅读它 here。
并且有很多方法可以获得around/handle可能的None
输入
1.要解决它,不要处理 None:
期待 str
所以当然会抛出错误。只需传入 ""
即可。但在这种情况下调用 my_func(None)
仍然会给你一个错误。
my_func("")
2。处理可能的 None
输入:
如果您想将 None
作为可能的输入参数之一处理,则将您的参数设置为 可选参数 和 *
这样您就可以输入 None
而不会出现错误
def my_func(*some_str):
或
默认输入 None
如果用户传入的值不是 None
那么你知道用户传入的是其他东西:这允许你做到 my_func(None)
并且不会出现错误
def my_func(some_str = None):
if some_str:
#do something
注意:这也允许您平等对待 None
和 ''
(感谢 Stael 指出)
None
不算作字符串。 None
是 class NoneType
的唯一成员。
要执行您想要的操作,请安排您的函数接受可选的字符串参数。
def my_func(some_str: str = None):
那就别传了None
,什么都不传:
a = my_func()
作为反对意见,Python 不是强类型的,因此 pycharm 的 linter 强调这一错误对我来说似乎有点奇怪。
当然有很多函数合法地需要一个字符串,但我确定我在某处看到 'good practice' 因为那个函数看起来更像这样:
def myfunct(s):
try:
s = str(s)
except TypeError:
raise TypeError('message explaining function usage')
# actual function
这适用于任何可以强制转换为字符串的东西,这似乎比要求字面上的字符串更明智。
我疯了吗?
好的,这个问题可能已经在某个地方得到了回答,但是我的 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 内置常量。阅读它 here。
并且有很多方法可以获得around/handle可能的None
输入
1.要解决它,不要处理 None:
期待 str
所以当然会抛出错误。只需传入 ""
即可。但在这种情况下调用 my_func(None)
仍然会给你一个错误。
my_func("")
2。处理可能的 None
输入:
如果您想将 None
作为可能的输入参数之一处理,则将您的参数设置为 可选参数 和 *
这样您就可以输入 None
而不会出现错误
def my_func(*some_str):
或
默认输入 None
如果用户传入的值不是 None
那么你知道用户传入的是其他东西:这允许你做到 my_func(None)
并且不会出现错误
def my_func(some_str = None):
if some_str:
#do something
注意:这也允许您平等对待 None
和 ''
(感谢 Stael 指出)
None
不算作字符串。 None
是 class NoneType
的唯一成员。
要执行您想要的操作,请安排您的函数接受可选的字符串参数。
def my_func(some_str: str = None):
那就别传了None
,什么都不传:
a = my_func()
作为反对意见,Python 不是强类型的,因此 pycharm 的 linter 强调这一错误对我来说似乎有点奇怪。
当然有很多函数合法地需要一个字符串,但我确定我在某处看到 'good practice' 因为那个函数看起来更像这样:
def myfunct(s):
try:
s = str(s)
except TypeError:
raise TypeError('message explaining function usage')
# actual function
这适用于任何可以强制转换为字符串的东西,这似乎比要求字面上的字符串更明智。
我疯了吗?