Python基础(八)

1.异常

        python使用异常的特殊对象来管理程序执行期间发生的错误。每当发生错误时,它都会创建一个异常对象,若未对异常进行处理,则会停止程序并显示一个traceback的报告。

2.try-except代码块

try:
    可能出现错误的语句
except:
    出错之后执行的代码块
else:
    没有出错的代码块
finally:
    不管有没有出错都执行的代码块


Exception可以查找全部的错误类型

        处理异常的语句并非越多越好,只要在合适的地方进行捕获就好,比如在统一调用的时候。

3.自定义异常

        自定义异常都要直接或间接继承Exception类

        由开发者主动抛出的自定义异常,在python中使用raise关键字

class myerror(Exception):
    def __str__(self):
        return "[error:] the num less than 0"


try:
    num=int(input('please enter a number:'))
    if num<0:
        raise myerror()
except myerror as e:
    print(e)
else:
    print('no error')
注意:当使用 raise 语句抛出异常时,需要引用该类的名称(即myerror),而不是其他任何名称。

同时,当在 except 子句中捕获异常时,也需要使用相同的类名(myerror)来指定您想要捕获的异常类型。这样,当该类型的异常被抛出时,except 子句中的代码块就会被执行。

所如果类名与在 raise 或 except 语句中使用的名称不匹配,Python 将无法识别您想要抛出或捕获的异常类型,从而导致错误。

4.动态添加属性与方法

        python是一种动态语言。动态语言可以在运行中添加新的属性和方法。

        属性的添加既可以添加实例属性也可以添加类属性。前文提到过,不多赘述。

        动态添加方法需要types

import types
#要添加的新方法
def func(self):
    print("a new func!")
class person(object):
    def __init__(self, name,age):
        self.name=name
        self.age=age
    def __str__(self):
        return f"{self.name} is {self.age}"

lh=person('John',20)
print(lh)
lh.newfunc=types.MethodType(func,lh)
lh.newfunc()
请注意,types.MethodType 的第一个参数是你想要绑定的函数,
第二个参数是你想要绑定到的对象(对于实例方法)或类(对于类方法或静态方法)。
如果你想要将函数绑定为类方法或静态方法,
你还需要提供一个额外的参数给 types.MethodType
(对于类方法,是类本身;对于静态方法,可以是任意值,但通常使用类名或 None)。
但在大多数情况下,你只是将函数绑定到实例上,所以只需要提供函数和实例作为参数。
@classmethod
def func1(cls):
    print('this is a func of class')
@staticmethod
def func2():
    print('this is a func of static')
class A:
    def __init__(self,x,y):
        self.x=x
        self.y=y
    
a=A(1,2)
A.class_func=func1#添加类方法
A.class_func()
a.class_func()

A.static_func=func2#添加静态方法
A.static_func()
a.static_func()

5.__slots__属性

        python可以在运行时添加属性和方法,若要限制在运行时给类添加属性,则在定义class时定义一个特殊的__slots__变量,来限制该class实例能添加的属性。

        自有在__slots__中的属性才能被添加,没有在其中的属性会添加失败。__slots__属性子类不会继承,只在当前类中有效。 当子类也声明了__slots__时,子类会继承父类的__slots__,也就是子类__slots__范围为本身的加父类的。

class Person(object):
    __slots__=('name','pro')
    def __init__(self, name):
        self.name = name
xl=Person('xl')
xl.pro='computer'
xl.age=19  -> 会报错

        在Python中,__dict__ 是一个内置属性,它返回一个对象的属性字典。这个字典包含了对象的所有属性(包括由类定义的和动态添加的),但不包括方法或函数(除非它们是作为属性动态添加的)。注意,不能与__slots__一起使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值