我想检查给定的对象是否可打印。我做了这个代码:
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。
答案 0 :(得分:2)
在Python 3中,所有对象都是“可打印的”,因为__str__
方法是在object
根类中定义的。
>>> hasattr(object, '__str__')
True
但您可以像这样定义is_printable
谓词:
is_printable = not isinstance(o, (str, dict, list))
但是,int
,float
或任何对象呢?
修改强>
如果班级明确定义__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;对象,但你明白了)