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

标签 python pycharm lint docstring

好吧,这个问题可能已经在某个地方得到了回答,但我的 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/

相关文章:

typescript - 无法使 tslint 与 Sublime Text 3 一起工作

python - 使用loop.create_task创建的asyncio事件循环任务是否为FIFO

python - 在字典中覆盖 Python 的哈希函数

python - 运行多个测试会在使用 @mock.patch.object 打补丁时干扰 nosetests,有时也会在使用 `with mock.patch.object` 时干扰

python - 安装包时 JetBrains DataSpell ModuleNotFoundError 错误

python - pycharm在两台计算机之间克隆同一项目的github时找不到解释器

node.js - eslint 忽略模式不起作用

python - 验证输入值 - PySimpleGUI

python - OpenCV - 访问 cv2.findContours 变量

c++ - clang-format 打破 lint 注释