2017-01-14 67 views
-1

我想检查给定的对象是否可打印。我做了这样的代码:简单的方法来检查对象是否可打印

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?我读过一些关于它的内容,但无法弄清楚。

非常感谢

编辑: 我要检查,在上面的例子中,如果对象是一个海峡,字典或列表。如果不是,则应该打印“不可打印的对象”。我已经读过,有一种更简单的方法可以通过尝试来完成,除了无法找到它。它很好地捕捉错误。

EDIT2:我知道一切都是打印的,我只是想检查,如果输入的数字,字符串或什么是“接受”与我所给出的规格。我只是为上面的代码寻找更简单的方法,所以我可以使用try和except。

+2

你打印的意思是什么? python中的每个对象都有一个'__str__','__unicode__'或'__repr__'函数来将对象转换为字符串表示。所有本地类型,bool,int,float等也是可打印的。 – 2ps

+0

我无法想象一个对象*不可*可打印。什么会使它如此? –

+0

python中的每个对象都是可打印的,所以你不需要检查它是否可打印。 – latsha

回答

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__ 
+0

为什么不简单地说:'hasattr(o,'__str __')'? –

+0

因为它总是“真”。 'class T:pass ... >>> t = T()>>> hasattr(t,'__str__')True'。但我只是认为对于课堂来说也是如此。所以我最后的回答是错误的,我会解决这个问题。 –

1

你可以称之为isinstance &打印在同一行:

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

(我可能忘了一些“可印刷“物体,但你明白了)

相关问题