我有一个接受参数的函数,该参数可以是单项或双项:
def iterable(arg)
if #arg is an iterable:
print "yes"
else:
print "no"
以便:
>>> 可迭代((“f”,“f”))
是的
>>> 可迭代的([“f”,“f”])
是的
>>> 可迭代的(“ff”)
不
问题是字符串在技术上是可迭代的,所以我在尝试 arg[1]
时不能只捕获 ValueError 。我不想使用 isinstance(),因为这不是好的做法(或者有人告诉我)。
原文由 priestc 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 isinstance (我不明白为什么这是不好的做法)
注意 StringTypes 的使用。它确保我们不会忘记一些晦涩的字符串类型。
从好的方面来说,这也适用于派生的字符串类。
另外,您可能想看看这个 previous question 。
干杯。
注意: Python 3 中的行为已更改为
StringTypes
和basestring
不再定义。根据您的需要,您可以将isinstance
中的它们替换为str
,或者(str, bytes, unicode)
的子集元组,例如对于 Cython 用户正如 @Theron Luhn 提到的,您还可以使用six
。