2017-01-14 99 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>") 

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

相關問題