代码之家  ›  专栏  ›  技术社区  ›  jon_two

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

  •  4
  • jon_two  · 技术社区  · 7 年前

    我有一个接受字符串的函数,但当我不传递任何字符串时,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
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   OLIVER.KOO    7 年前

    首先回答你的问题 None 不是一个 str 它是 type.Nonetype here . 有很多方法可以绕过/处理

    1、要想避开它,不要一个也不处理:

    正在期待 str公司 当然,它会抛出一个错误。进来吧 "" my_func(None) 仍然会给你一个错误。

    my_func("") 
    

    2、处理可能 输入:

    如果你想处理 可选参数 具有 * 这样你就可以输入 没有一个

    def my_func(*some_str):
    

    默认输入为 没有一个 然后您知道用户传入了其他内容:这允许您执行以下操作: my_func(无)

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

    注意:这也允许您治疗 没有一个 '' 同样(感谢斯塔尔指出)

        2
  •  1
  •   Stael    7 年前

    作为一种不同的观点,Python不是强类型的,因此pycharm的linter强调这一错误对我来说似乎有点奇怪。

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

    这适用于任何可以强制为字符串的对象,这似乎比要求字符串更合理。

    我疯了吗?

        3
  •  1
  •   BoarGules    7 年前

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

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

    def my_func(some_str: str = None):
    

    没有一个 ,不传递:

    a = my_func()