15.7 - Depuração
Ao começar a trabalhar com objetos, provavelmente você encontrará algumas novas exceções. Se tentar acessar um atributo que não existe, recebe um AttributeError
:
>>> p = Point()
>>> p.x = 3
>>> p.y = 4
>>> p.z
AttributeError: Point instance has no attribute 'z'
Se não estiver certo sobre o tipo que um objeto é, pode perguntar:
>>> type(p)
<class '__main__.Point'>
Você também pode usar isinstance
para verificar se um objeto é uma instância de uma classe:
>>> isinstance(p, Point)
True
Caso não tenha certeza se um objeto tem determinado atributo, você pode usar a função integrada hasattr
:
>>> hasattr(p, 'x')
True
>>> hasattr(p, 'z')
False
O primeiro argumento pode ser qualquer objeto; o segundo argumento é uma string
com o nome do atributo.
Você também pode usar uma instrução try
para ver se o objeto tem os atributos de que precisa:
try:
x = p.x
except AttributeError:
x = 0
Essa abordagem pode facilitar a escrita de funções que atuam com tipos diferentes; você verá mais informações sobre isso em “Polimorfismo”, na página 248.