Python re.findall()能否返回None?
唯一的说法是返回“列表”。我假设当它没有找到匹配项时,它返回一个空列表(但不是Python re.findall()能否返回None?,python,documentation,return-value,Python,Documentation,Return Value,唯一的说法是返回“列表”。我假设当它没有找到匹配项时,它返回一个空列表(但不是None),并且它从不返回None。但我不确定。有人能证实吗 另外,是否有一种方法可以让我自己在将来为其他函数(例如ElementTree.findall())检查它?我是否可以假设,每当文档说“列表”时,它的行为都是一样的 >>> import re >>> s = "hello" >>> re.findall("a", s) [] 对于这类问题,请打开pyth
None
),并且它从不返回None
。但我不确定。有人能证实吗
另外,是否有一种方法可以让我自己在将来为其他函数(例如
ElementTree.findall()
)检查它?我是否可以假设,每当文档说“列表”时,它的行为都是一样的
>>> import re
>>> s = "hello"
>>> re.findall("a", s)
[]
对于这类问题,请打开pythonshell并运行它:根据文档,它总是返回一个列表,但找不到任何内容,因此它是一个空列表
对于内部问题:
“我只想让文档说”它不返回“或”它总是返回一个列表“
我认为您需要了解Python文档的风格。第一行是
“返回字符串中模式的所有非重叠匹配项,作为字符串列表”
如果它返回了任何其他内容,它会声明这一点。e、 g:在同一页上,对于sub:
返回通过替换repl替换字符串中最左侧不重叠的模式而获得的字符串。如果找不到该模式,则返回的字符串将保持不变
这说明了边缘情况
您不能假设任何库中任何人编写的所有函数都具有与python核心一样好的文档。但是对于Python中的核心函数,是的,它们通常几乎总是按照文档所说的那样做。(核心功能是:或子页面中的任何内容
如果你从pypi中随机获取一个库,文档可能就不那么完美了
python的一个“坏”方面是,它的文档会受到异常等问题的影响。Java等语言,异常是函数/方法定义的一部分,返回类型更为严格。基本上,请记住python的禅宗思想,并与之保持一致。python.org/dev/peps/pep-0020
对于这类问题,请打开pythonshell并运行它:根据文档,它总是返回一个列表,但找不到任何内容,因此它是一个空列表
对于内部问题:
“我只想让文档说”它不返回“或”它总是返回一个列表“
我认为您需要了解Python文档的风格
“返回字符串中模式的所有非重叠匹配项,作为字符串列表”
如果它返回任何其他内容,它将说明此内容。例如:在同一页上,对于sub:
返回通过替换repl替换字符串中最左侧不重叠的模式而获得的字符串。如果找不到该模式,则返回的字符串将保持不变
这说明了边缘情况
您不能假设任何库中的任何人编写的所有函数都具有与python核心一样好的文档。但是对于python中的核心函数,是的,它们通常几乎总是按照文档中的说明执行。(核心函数是:或的子页面中的任何内容。)
如果你从pypi中随机获取一个库,文档可能就不那么完美了
“坏”之一关于python的事情是,它的文档会因为异常之类的事情而受到影响。像Java这样的语言,异常是函数/方法定义的一部分,返回类型更严格。基本上,试着记住python的禅宗,并随它而流。python.org/dev/peps/pep-0020我同意现有的答案/评论这是因为你可以相信内置函数只返回文档中所说的它们返回的内容,而快速的自我测试应该会让你对常见情况下的行为充满信心。但是为了完整性,让我们看得更深入一些。可以找到CPython的findall源代码。我们只对ret感兴趣urn语句,它们是:
if (!state_init(&state, self, string, pos, endpos))
return NULL;
list = PyList_New(0);
if (!list) {
state_fini(&state);
return NULL;
}
//...
state_fini(&state);
return list;
error:
Py_DECREF(list);
state_fini(&state);
return NULL;
所以这个函数可以返回两个可能的值:一个列表或NULL
在这里返回
NULL
会向解释器发出信号,表示该函数不返回任何值。如果该函数不想返回任何值,它会这样做。因此,我们可以合理地假设findall
将始终返回一个列表,只要它不崩溃。我同意现有答案/注释,您可以信任builtin functions只返回文档中所说的内容,并且快速的自我测试应该会让您对常见情况下的行为有信心。但是为了完整性,让我们深入了解一下。可以找到CPython的findall源代码。我们真正感兴趣的是返回语句,它们是:
if (!state_init(&state, self, string, pos, endpos))
return NULL;
list = PyList_New(0);
if (!list) {
state_fini(&state);
return NULL;
}
//...
state_fini(&state);
return list;
error:
Py_DECREF(list);
state_fini(&state);
return NULL;
所以这个函数可以返回两个可能的值:一个列表或NULL
在这里返回
NULL
会向解释器发出信号,表示函数不返回任何值。如果函数不想返回任何值,它会这样做。因此,我们可以合理地假设findall
将始终返回一个列表,只要它不崩溃。有没有办法让我自己在将来检查它,print(ElementTree.findall('lets_check_output_for_non_existing_tag'))
自己尝试一个简单的python解释器花费很少。就像键入两行代码:一行用于导入,一行用于结果。我实际上没有想到这一点。但我不认为这让我的问题值得否决。特别是,因为这没有给我完整的信息(在任何情况下都会发生什么).@NPS除非您可以根据世界上的任何输入检查函数(提示:您不能,即停止问题),否则您无法知道在任何情况下会发生什么。正如我已经编写的,您必须信任文档,如果您不信任,您可以始终检查输出是否为None
“如果与任何内容不匹配,findall
是否会返回None?”只需一个测试即可轻松回答。“在任何情况下,findall
是否会返回None,包括但不包括n?”