我有以下代码
def printmylist( mylist ):
"""
print tree
"""
try:
for f in mylist:
printmylist( f )
except:
print( " " + mylist )
希望获得如下输出:
root
branch
leaf
leaf
但由于字符串是可枚举的,我得到
r
o
o
t
.
.
检查类型似乎是unpythonic,那么Python将如何解决这个问题呢?
答案 0 :(得分:5)
我所知道的最简洁的方法是使用types.StringTypes
(不要与types.StringType
混淆):
isinstance(var, types.StringTypes)
可替换地:
isinstance(var, basestring)
types
模块的文档表明后者是最近版本的Python 2.x中的首选方式。
答案 1 :(得分:1)
我使用以下pythonic方法来解决这个问题。无需isinstance()
次来电。因此它甚至适用于我用python包装的各种自定义C ++字符串类。我不认为那些基于实例()的方法在这些情况下会起作用。此外,OP明确要求提供不涉及类型检查的解决方案。 Pythonistas检查行为,而不是类型。
这里的技巧涉及观察字符串具有不寻常的属性:单字符字符串的第一个元素是相同的单字符字符串。
"f"[0] == "f"
这适用于python 2.x:
def is_string(s):
try:
if (s[0] == s[0][0]):
return True
except:
pass
return False
答案 2 :(得分:-1)
最简单的是if type(f) == str
有时最好使用if而不是例外。
编辑:
由于larsmans评论,我不推荐这个选项。它在简单使用中很有用,但在专业编码中,最好使用isinstance
。