2017-01-14 9 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を使って簡単な方法がありますか?私はそれについて何かを読んだが、それを理解できない。

どうもありがとう

EDIT: 私は、オブジェクトがSTR、辞書やリストであれば、上記の例では、チェックしたいです。そうでなければ、 "印刷不可能なオブジェクト"を印刷する必要があります。私は試してみるともっと簡単な方法があると読んだことがあるが、これ以上見つからない。エラーをキャッチするのは良いです。

EDIT2:私はすべてが印刷可能であることを知って、私はちょうど入力された数値、文字列または何が私が与えてくれた仕様と「受け入れ」ているかどうかを確認します。私はちょうど上記のコードのための簡単な方法を探しているので、私はtryとexceptを使うことができます。パイソン3において

+2

印刷可能とはどういう意味ですか? Pythonのすべてのオブジェクトには、オブジェクトを文字列表現に変換する '__str__'、' __unicode__'または '__repr__'関数があります。すべてのネイティブ型、bool、int、floatなども印刷可能です。 – 2ps

+0

私はオブジェクトが印刷可能ではないと想像することはできません。それは何をそうするでしょうか? –

+0

pythonのすべてのオブジェクトは印刷可能なので、印刷可能かどうかを確認する必要はありません。 – latsha

答えて

2

__str__方法はobjectルートクラスで定義されているため、すべてのオブジェクトが「印刷可能」です。

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

しかし、あなたは、このようなあなたのis_printable述語定義することができます。

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

をしかし、何intfloatまたは任意のオブジェクトについてはどうですか?

編集

クラスが明示的にこのよう__str__を定義する場合を確認することができません:それは常にTrueあるので

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

__str__メソッドはobject(およびtype)から継承されています。

しかし、(それが存在する場合)あなたは__dict__属性を検査することができます(私はおそらくいくつかの「印刷可能を忘れてる

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

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

なぜ単純に: 'hasattr(o、 '__str __')'? –

+0

常に 'True'であるためです。 'class T:pass ... >>> t = T()>>> hasattr(t、 '__str__')True'です。しかし、私はそれがクラスにも当てはまると考えました。だから私の最後の答えは間違っています。私はそれを修正します。 –

1

あなたは1行でisinstance &印刷を呼び出すことができます"オブジェクト、しかしあなたは考えを得る)

関連する問題