在PHP中有一个函数调用isset()
来检查某些东西(如数组索引)是否存在并具有值.Python怎么样?
我需要在数组上使用它,因为我有时会得到"IndexError:list index out of range".
我想我可以使用try/catch,但这是最后的选择.
wim*_*wim 102
在你跳跃之前看(LBYL):
if idx < len(array):
array[idx]
else:
# handle this
Run Code Online (Sandbox Code Playgroud)
比许可更容易请求宽恕(EAFP):
try:
array[idx]
except IndexError:
# handle this
Run Code Online (Sandbox Code Playgroud)
在Python中,EAFP似乎是流行和首选的风格(因为它通常更可靠).所以,在所有其他条件相同的情况下,我建议在这个用例中使用try
/ except
version - 不要将它视为"最后的手段".
这段摘录来自上面链接的官方文档,支持使用try/except流控制:
这种常见的Python编码风格假设存在有效的键或属性,并且如果假设被证明是错误则捕获异常.这种干净和快速的风格的特点是存在许多try和except语句.
Tad*_*eck 45
我理解你的困境,但Python并不是PHP和称为宽容的编码风格,而不是Permission(或简称EAFP)是Python中常见的编码风格.
查看来源(来自文档):
EAFP - 比许可更容易请求宽恕.这种常见的Python编码风格假设存在有效的键或属性,并且如果假设被证明是错误则捕获异常.这种干净和快速的风格的特点是存在许多try和except语句.该技术与许多其他语言(如C)共有的LBYL风格形成对比.
所以,基本上,在这里使用try-catch语句不是最后的手段; 这是一种常见的做法.
PHP具有关联和非关联数组,Python具有列表,元组和字典.列表类似于非关联PHP数组,字典类似于关联PHP数组.
如果你想检查"数组"中是否存在"key",你必须首先告诉Python它是什么类型,因为当"key"不存在时它们会抛出不同的错误:
>>> l = [1,2,3]
>>> l[4]
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
l[4]
IndexError: list index out of range
>>> d = {0: '1', 1: '2', 2: '3'}
>>> d[4]
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
d[4]
KeyError: 4
Run Code Online (Sandbox Code Playgroud)
如果您使用EAFP编码样式,您应该恰当地捕获这些错误.
如果您坚持使用LBYL方法,这些是您的解决方案:
对于列表只检查长度和if possible_index < len(your_list)
,然后your_list[possible_index]
存在,否则它不会:
>>> your_list = [0, 1, 2, 3]
>>> 1 < len(your_list) # index exist
True
>>> 4 < len(your_list) # index does not exist
False
Run Code Online (Sandbox Code Playgroud)对于字典,您可以使用in
关键字if possible_index in your_dict
,然后your_dict[possible_index]
存在,否则它不会:
>>> your_dict = {0: 0, 1: 1, 2: 2, 3: 3}
>>> 1 in your_dict # index exists
True
>>> 4 in your_dict # index does not exist
False
Run Code Online (Sandbox Code Playgroud)它有帮助吗?
Ama*_*dan 15
`e` in ['a', 'b', 'c'] # evaluates as False
`b` in ['a', 'b', 'c'] # evaluates as True
Run Code Online (Sandbox Code Playgroud)
编辑:澄清,新答案:
请注意,PHP数组与Python有很大不同,它将数组和数组合并为一个混乱的结构.Python的数组总是有指数从0
到len(arr) - 1
,这样你就可以检查你的索引是否是在这个范围内.try/catch
但是,这是一个很好的方式来进行pythonically.
如果你问的是PHP"数组"(Python dict
)的哈希函数,那么我以前的答案仍然有点看法:
`baz` in {'foo': 17, 'bar': 19} # evaluates as False
`foo` in {'foo': 17, 'bar': 19} # evaluates as True
Run Code Online (Sandbox Code Playgroud)
小智 7
has_key
快速高效.
而不是数组使用哈希:
valueTo1={"a","b","c"}
if valueTo1.has_key("a"):
print "Found key in dictionary"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
125143 次 |
最近记录: |