当docstring需要字符串时,可以传递None参数吗?

2024-05-12 19:13:23 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,这个问题可能已经在某个地方得到了回答,但是我的googlefu还没有找到正确的关键字组合。在

我有一个接受字符串的函数,但是当我没有通过时,Pycharm的检查将标记一个类型错误。这是皮棉上的错误吗?不算字符串吗?我知道我可以用空字符串调用函数,但我想我也不应该使用任何字符串。在

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

Tags: 函数字符串标记none类型my地方错误
3条回答

首先回答您的问题None不是str它是type.Nonetype的唯一值,它是一个内置于Contstant中的python。请阅读here。 还有很多方法可以绕过/处理可能的None输入

1。为了避开它,不去处理任何事情:

应为str,因此它当然会抛出一个错误。只需传入""。但在本例中,调用my_func(None)仍然会给您一个错误。在

my_func("") 

2。要处理可能的None输入:

如果您想将None作为一个可能的输入参数,那么使用*将参数设置为可选参数,这样就可以输入None而不会出现错误

^{pr2}$

默认输入为None如果user pass-in的值不是None,那么您就知道用户传入了其他内容:这允许您执行my_func(None)操作而不会出错

def my_func(some_str = None):
  if some_str:
    #do something

注意:这也允许您平等对待None和{}(感谢Stael的指出)

None不计算为字符串。None是类NoneType的唯一成员。在

若要执行所需操作,请安排函数接受可选的字符串参数。在

def my_func(some_str: str = None):

那就不要传递它None,什么都不传递:

^{pr2}$

作为反对意见,Python并不是强类型的,所以pycharm的linter强调,作为一个错误,我觉得有点奇怪。在

当然,有许多函数合法地需要字符串,但我确信我在某个地方看到了一个“好做法”,因为它是一个看起来更像这样的函数:

def myfunct(s):
    try:
        s = str(s)
    except TypeError:
        raise TypeError('message explaining function usage')
    # actual function

这适用于任何可以强制为字符串的内容,这似乎比实际需要字符串更合理。在

我疯了吗?在

相关问题 更多 >