Python 深度了解錯誤處理相關函數
type()
type() 函數用于返回一個對象的數據類型。它不僅可以用來檢查基本數據類型(如整數、字符串等),還可以用于確定自定義類的實例類型。
語法
type(object)
示例
print(type(123)) #
print(type("hello")) #
print(type([1, 2, 3])) #
class MyClass:
pass
obj = MyClass()
print(type(obj)) #
isinstance()
isinstance() 函數用于檢查一個對象是否是指定類型或其子類的實例。這比直接使用 type() 更加靈活,因為它支持繼承關系的檢查。
語法
isinstance(object, classinfo)
object: 要檢查的對象。
classinfo: 類或類型元組,也可以是類型對象的元組。
示例
class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
print(isinstance(dog, Dog)) # True
print(isinstance(dog, Animal)) # True
print(isinstance(dog, (Dog, Animal))) # True
print(isinstance(dog, str)) # False
getattr()
getattr() 函數用于獲取對象的屬性值。如果指定的屬性不存在,則可以提供一個默認值。這對于安全地訪問可能不存在的屬性特別有用,避免了引發異常。
語法
getattr(object, name[, default])
object: 要從中獲取屬性的對象。
name: 屬性名(字符串形式)。
default: 可選參數,當屬性不存在時返回的默認值。
示例
class Person:
def __init__(self, name):
self.name = name
person = Person("Alice")
print(getattr(person, "name")) # Alice
print(getattr(person, "age", "未知")) # 未知
hasattr()
hasattr() 函數用于檢查對象是否有指定的屬性。它返回一個布爾值,表示該屬性是否存在。
語法
hasattr(object, name)
object: 要檢查的對象。
name: 屬性名(字符串形式)。
示例
class Person:
def __init__(self, name):
self.name = name
person = Person("Alice")
print(hasattr(person, "name")) # True
print(hasattr(person, "age")) # False
錯誤處理與最佳實踐
使用上述函數時,遵循一些最佳實踐可以使代碼更健壯:
優先使用 isinstance():相比于 type(),isinstance() 更推薦用于類型檢查,因為它能夠正確處理繼承關系。
結合 getattr() 和默認值:當您不確定某個對象是否具有特定屬性時,使用 getattr() 并提供一個默認值是一個很好的習慣,這樣即使屬性不存在也不會導致程序崩潰。
利用 hasattr() 進行預檢查:在嘗試訪問屬性之前,可以先用 hasattr() 檢查屬性是否存在,從而提前避免潛在的 AttributeError 異常。
考慮使用 try-except 結構:有時直接嘗試訪問屬性并在失敗時捕獲異常可能是更簡潔的方法,尤其是在處理多個屬性或復雜的邏輯時。
了解 Python 的鴨子類型:Python 支持“鴨子類型”,即如果一個對象表現得像某種類型(例如實現了所需的方法),那么它就可以被當作那種類型來使用。在這種情況下,過于嚴格的類型檢查可能會限制靈活性。