当docstring需要字符串时,你能传递一个None参数吗?

时间:2017-08-09 15:14:10

标签: python pycharm lint docstring

好的,这个问题可能已在某处得到解答,但我的Google-fu还没有找到合适的关键字组合。

我有一个接受字符串的函数,但是当我传递None时,Pycharm的检查会标记类型错误。这是一个错误吗?没有算作字符串吗?我知道我可以使用空字符串调用该函数,但我认为我也应该能够使用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

3 个答案:

答案 0 :(得分:1)

首先回答你的问题None不是str它是type.Nonetype的唯一值,它是一个python内置常量。阅读它here。 有许多方法可以绕过/处理可能的None输入

<强> 1。要绕过它,不要处理无:

期待str,当然,它会引发错误。只需传入""即可。但在这种情况下,调用my_func(None)仍然会给你一个错误。

my_func("") 

<强> 2。处理可能的None输入:

如果您想将None作为可能的输入参数之一进行处理,请将参数设置为可选参数 *,这样您就可以输入None和没有错误

def my_func(*some_str):

默认您输入None ,如果用户传入的值不是None,那么您知道用户传入其他内容:这样您就可以{{1} }并没有得到错误

my_func(None)

注意:这也允许您平等对待def my_func(some_str = None): if some_str: #do something None(感谢Stael指出)

答案 1 :(得分:1)

None不算作字符串。 None是班级NoneType的唯一成员。

要做你想做的事,请安排你的函数接受一个可选的字符串参数。

def my_func(some_str: str = None):

然后不要传递None,不传递任何内容:

a = my_func()

答案 2 :(得分:1)

作为反对意见,Python不是强类型的,因此pycharm的linter要突出显示,因为错误对我来说似乎有些奇怪。

当然有很多功能合法地需要一个字符串,但我确定我看到了一个好的做法&#39;因为这是一个看起来更像这样的功能:

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

这适用于任何可以强制转换为字符串的内容,这似乎比字面上的字符串更合理。

我疯了吗?