1.前言
隔离日记DAY7
2.学习内容
1.bug常见类型 被动掉坑 try except
a=int(input('请输出第一个整数')) b=int(input('请输出第二个整数')) result=a/b print('结果为',result) #若输入的数为字母 或b=0时,也会报错,是由于一些例外形况
这个bug是因为除数不能为0,所以导致程序出错
try: a=int(input('请输出第一个整数')) b=int(input('请输出第二个整数')) result=a/b print('结果为',result) #若输入的数为字母 或b=0时,也会报错,是由于一些例外形况 except ZeroDivisionError: print('对不起:除数不允许为0') print('程序结束')
把认为可能出错的程序try一下,再把出现的错误except一下。程序就不会报错,也就是提前告知程序哪些地方可能会报错。
try: a=int(input('请输出第一个整数')) b=int(input('请输出第二个整数')) result=a/b print('结果为',result) #若输入的数为字母 或b=0时,也会报错,是由于一些例外形况 except ZeroDivisionError: print('对不起:除数不允许为0') except ValueError: print('只能输入数字串') print('程序结束')
2.try-except-else与try-except-else-finally
try: a=int(input('请输出第一个整数')) b=int(input('请输出第二个整数')) result=a/b except BaseException as e: print('出错了',e) else: print('计算结果为:',result)
出错的话执行 try-except
不出错的话执行 try-esle
try: a=int(input('请输出第一个整数')) b=int(input('请输出第二个整数')) result=a/b except BaseException as e:#出错走这里 print('出错了',e) else:#不出错走这里 print('计算结果为:',result) finally:#出错 不出错都走这里 print('谢谢您的使用')
同上
3.常见的异常类型
#1.数学运算异常 #print(10/0) ZeroDivisionError lst=[11,22,33,44] #print(lst[4])#IndexError 索引从0开始 dic={'name':'张三','age':20} #print(dic['gender'])#KeyError #print(num) #NameError #int a=20 #SyntaxError语法错误 不能这么定义 a=int('hello')#ValueError 字符串不能转换为十进制整数
4.traceback模块的使用
意思是traceback模块是打印错误的模块,当我使用except时不会报错,但是我主动调用traceback模块,就会报出错 #print(10/0) import traceback try: print('--------------') print(1/0) except: traceback.print_exc()
意思是traceback模块是打印错误的模块,当我使用except时不会报错,但是我主动调用traceback模块,就会报出错
5.pycharm的程序调试
i=1 while i<=10: print(i) i+=1
就是设置断点,然后点debug
6.定义python中的类
class Student:#Student为类的名称(类名),由一个或者多个单词组成,每个字母的首字母大写,其余小写 pass #python中一切皆对象 Student是对象嘛? 内存有开空间嘛? 有! print(id(Student))#Student print(type(Student))#<class 'type'> print(Student)#<class '__main__.Student'>
class Student: #Student为类的名称(类名),由一个或者多个单词组成,每个字母的首字母大写,其余小写 native_place='吉林'#直接写在类里并且在方法外的变量 称为类属性 def __init__(self,name,age): self.name=name #self.name称为实体属性,进行了一个赋值的操作,将局部变量的name值赋给实体属性 self.age=age #实例方法 def eat(self):#必须写self print('学生在吃饭') #静态方法 @staticmethod def method():#不允许写self print('我使用了staticmethod进行修饰,所以我是静态方法') #类方法 @classmethod def cm(cls):#必须写cls print('我是类方法,因为我使用了classmethod进行修饰') #在类之外定义的称为函数,在类之内定义的称为方法 def drink(): print('喝水')
注意类名首字母要大写
在类之外定义的称为函数,在类之内定义的称为方法
7.对象的创建
class Student: # Student为类的名称(类名),由一个或者多个单词组成,每个字母的首字母大写,其余小写 native_place = '吉林' # 直接写在类里的变量 称为类属性 def __init__(self, name, age): self.name = name # self.name称为实体属性,进行了一个赋值的操作,将局部变量的name值赋给实体属性 self.age = age # 实例方法 def eat(self): # 必须写self print('学生在吃饭') # 静态方法 @staticmethod def method(): # 不允许写self print('我使用了staticmethod进行修饰,所以我是静态方法') # 类方法 @classmethod def cm(cls): # 必须写cls print('我是类方法,因为我使用了classmethod进行修饰') # 在类之外定义的称为函数,在类之内定义的称为方法 def drink(): print('喝水') #创建Student类的对象 stu1=Student('张三',20)#stu1是Student类的对象 print(id(stu1)) print(type(stu1)) print(stu1)#当输出stu1的值是 值为其id的十六进制数 print('----------------------') print(id(Student))#Student是类的名称 print(type(Student)) print(Student)
8.类属性 类方法 静态方法的使用方式
class Student: # Student为类的名称(类名),由一个或者多个单词组成,每个字母的首字母大写,其余小写 native_place = '吉林' # 直接写在类里的变量 称为类属性 def __init__(self, name, age): self.name = name # self.name称为实体属性,进行了一个赋值的操作,将局部变量的name值赋给实体属性 self.age = age # 实例方法 def eat(self): # 必须写self print('学生在吃饭') # 静态方法 @staticmethod def method(): # 不允许写self print('我使用了staticmethod进行修饰,所以我是静态方法') # 类方法 @classmethod def cm(cls): # 必须写cls print('我是类方法,因为我使用了classmethod进行修饰') #类属性的使用方式 #print(Student.native_place) stu1=Student('张三',20) stu2=Student('李四',30) print(stu1.native_place) print(stu2.native_place) Student.native_place='天津' print(stu1.native_place)#天津 print(stu2.native_place) print('----------类方法的使用方式----------') #类方法的使用方式- Student.cm() print('----------静态方法的使用方式----------') Student.method()
9.动态绑定属性和方法
class Student: def __init__(self,name,age):# self.name=name self.age=age def eat(self): print(self.name+'在吃饭') stu1=Student('张三',20)#stu1是Student的实例对象 stu2=Student('李四',30)#stu2是Student的实例对象 print(id(stu1)) print(id(stu2)) print('-----------为stu2动态绑定性别属性---------') stu2.gender='女'#只适用于当前绑定的stu2,而之前定义的name与age是定义在类之中的,是所以实例对象都可以使用的 print(stu1.name,stu1.age)#张三 20 print(stu2.name,stu2.age,stu2.gender)#李四 30 女 print('-----------------') stu1.eat()#张三在吃饭 stu2.eat()#李四在吃饭 #动态绑定方法 def show(): print('定义在类之外的,称为函数') stu1.show=show#使stu1绑定show方法 stu1.show() #stu2.show()#AttributeError 错误!因为stu2没有绑定show方法
10.封装的实现方式
class Car: def __init__(self,brand): self.brand=brand def start(self): print(print('汽车已启动...')) car=Car('宝马x5') car.start() print(car.brand)
class Student: def __init__(self,name,age): self.name=name self.__age=age #age不希望在类的外部被使用,所以加了两个下划线 def show(self): print(self.name,self.__age) stu=Student('张三',20) stu.show()
age不希望在类的外部被使用,所以加了两个下划线
3.结束语
隔离第七天马上结束了。我想回去练琴!