Python isinstance函数 raise

本文介绍了使用Python内置函数isinstance进行数据类型检查,并通过raise语句抛出异常来确保函数参数符合预期类型。详细解释了如何在函数中添加参数检查,以及在传入错误类型参数时引发TypeError。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看了下廖雪峰的网站,发现有个isinstance函数可以对参数类型进行判断:


对参数类型做检查,只允许整数和浮点数类型的参数。数据类型检查可以用内置函数isinstance实现:

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x

添加了参数检查后,如果传入错误的参数类型,函数就可以抛出一个错误:

>>> my_abs('A')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in my_abs
TypeError: bad operand type


使用raise抛出异常

当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行


摘自:

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00137473843313062a8b0e7c19b40aa8f31bdc4db5f6498000

转载于:https://my.oschina.net/u/2003106/blog/359604

### Python `isinstance` 函数及其用法 #### 什么是 `isinstance` 函数? `isinstance` 是 Python 的内置函数,用于检查一个对象是否是指定类型或其派生类型的实例。它在编写代码时进行类型检查非常有用,可以确保代码的健壮性和可靠性[^1]。 #### 函数签名 `isinstance` 的函数签名如下: ```python isinstance(object, classinfo) ``` - `object`:需要检查的对象。 - `classinfo`:可以是单个类型(如 `int`、`str`)、元组中的多个类型(如 `(int, str)`),或者抽象基类(如 `collections.abc.Iterable`)[^2]。 #### 使用示例 以下是一些常见的使用示例: ##### 示例 1:基本类型检查 ```python x = 5 print(isinstance(x, int)) # 输出: True print(isinstance(x, str)) # 输出: False ``` ##### 示例 2:检查继承关系 ```python class Animal: pass class Dog(Animal): pass dog = Dog() print(isinstance(dog, Dog)) # 输出: True print(isinstance(dog, Animal)) # 输出: True ``` ##### 示例 3:检查多个类型 ```python y = "Hello" print(isinstance(y, (int, str))) # 输出: True print(isinstance(y, (list, dict))) # 输出: False ``` ##### 示例 4:与 `type()` 的区别 虽然 `isinstance` 和 `type()` 都可以用于类型检查,但它们的行为不同。`isinstance` 会考虑继承关系,而 `type()` 不会。 ```python class Base: pass class Derived(Base): pass derived_instance = Derived() print(isinstance(derived_instance, Base)) # 输出: True print(type(derived_instance) == Base) # 输出: False ``` #### 特殊情况处理 如果 `classinfo` 不是类型或包含类型的元组,则会引发 `TypeError` 异常。 ```python print(isinstance(5, "int")) # 抛出 TypeError: isinstance() arg 2 must be a type or tuple of types ``` #### 应用场景 1. **函数参数验证**:确保传入的参数符合预期类型。 2. **动态类型检查**:在运行时根据对象类型执行不同的逻辑。 3. **兼容性检查**:验证对象是否属于某个抽象基类或接口。 #### 注意事项 - 过度依赖 `isinstance` 可能会导致代码不够灵活,应尽量遵循“鸭子类型”原则。 - 如果可能,优先使用多态或协议(如 `collections.abc` 中定义的抽象基类)来实现更通用的设计[^3]。 ```python from collections.abc import Iterable def process_items(items): if not isinstance(items, Iterable): # 检查是否为可迭代对象 raise TypeError("items must be an iterable") for item in items: print(item) process_items([1, 2, 3]) # 正常运行 process_items("abc") # 正常运行 process_items(123) # 抛出 TypeError ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值