检查对象是否可打印的简便方法

时间:2017-01-14 13:17:53

标签: python python-3.x

我想检查给定的对象是否可打印。我做了这个代码:

def print_object(o):
    if isinstance(o, str):
        print(o)
    elif isinstance(o, dict):
        print(o)
    elif isinstance(o, list):
        print(o)
    # go on and on...
    else:
        print("unprintable object")

但使用try / except有更简单的方法吗?我已经读过一些关于它的内容但是无法弄明白。

非常感谢

编辑: 我想在上面的例子中检查对象是str,dict还是list。如果不是,那就应该打印出不可打印的对象"。我已经读过,有一种更简单的方法可以尝试,除了但不能再找到它了。抓住错误很好。

EDIT2:我知道一切都是可打印的,我只想检查输入的数字,字符串或其他内容是否已被接受"符合我的规格。我只是在寻找上述代码的简便方法,所以我可以使用try和except。

2 个答案:

答案 0 :(得分:2)

在Python 3中,所有对象都是“可打印的”,因为__str__方法是在object根类中定义的。

>>> hasattr(object, '__str__')
True

但您可以像这样定义is_printable谓词:

is_printable = not isinstance(o, (str, dict, list))

但是,intfloat或任何对象呢?

修改

如果班级明确定义__str__无法检查

is_printable = hasattr(o, '__str__')
# or
is_printable = hasattr(o.__class__, '__str__')

因为它总是True__str__方法继承自object(和type)。

但您可以检查__dict__属性(如果存在):

is_printable = hasattr(o, '__dict__') and '__str__' in o.__dict__

答案 1 :(得分:1)

你可以致电isinstance&打印成一行:

print(o if isinstance(o, (int,float,str,list,dict,tuple)) else "<unprintable>")

(我可能会忘记一些&#34;可打印&#34;对象,但你明白了)