python学习——类,文件和异常

创建类

创建一个小狗的类

class Dog():
    def __int__(self, name, age):
        self.name = name
        self.age = age

    def sit(self):
        print(self.name.title() + " is now sitting")

    def roll_over(self):
        print(self.name.title() + " rolled over!")

这里我们定义了一个Dog类,python中首字母大写的名称指的是类

根据类来创建对象叫做实例化。

__int__(self,name,age)相当于构造函数,每当创建一个对象的时候会自动执行

self参数实际上就是对象本身的引用,相当于C++里的this指针,我们在调用类方法的时候不需要管它,它会自动传递实例的引用

我们可以直接在类内初始化一个值,只需要在初始化函数里添加相应的语句即可。

修改类中属性的值

1.通过实例进行修改

a.age=10//直接通过实例来修改狗狗的年龄

2.通过类方法进行设置

def changeAge(aimAge):
    self.age=aimAge

将这个方法添加到类中,并调用这个方法即可修改年龄

类的继承

class Car():
#汽车类
    def __int__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0#初始化里程为0
    def get_descriptive_name(self):
        long_name=str(self.year+' '+self.make+' '+self.model)
        return long_name.title()
    def read_odometer(self,mileage):
        if mileage >= self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("你不能这样做")

#电动汽车类
class ElectricCar(Car):
    def __init__(self,make,model,year):
        super().__init__(make,model,year)#这条代码是初始化父类所有属性
        self.battery_size=70#电动车特有电瓶属性

注意事项:创建子类时,父类必须在前面,而且必须在子类括号里指明父类的名称

super()是一个特殊函数,它可以将子类和父类关联起来,可以调用父类的__init__()方法,使子类中包含父类的所有属性

只要子类方法里的方法与父类方法同名,python就只会执行子类里的方法

规范

类名首字母大写

类方法使用小写字母,且单词之间使用_分隔

类方法之间空一行来分隔

类之间使用两个空行来分隔

导入类

导入类和导入模块的方法是一样的

1.import 文件名

可使用该文件中的所有类 以及函数,但是注意,用类来定义实例时候要加文件名.类名

2.from 文件名 import 类名

直接使用类名来定义实例即可

3. import 文件名 as 改后的名字

4.from 文件名 import 类名 as 改后的名字

文件和异常

从文件中读取数据

#aa.txt
123
456
789

在当前目录下创建一个aa.txt的文件

with open("aa.txt") as fp:
    c=fp.read()
    print(c)

open函数参数为要打开文件的文件名,返回一个表示该文件的对象,用as 将其存储在fp中

后续对fp的操作就相当于对相应的文件进行操作,read方法是从文件头读到文件尾,返回一个字符串,当读到文件尾部的时候,返回一个空字符串

输出结果为:

我们可以使用rstrip方法来删除这个空白

rstrip:用来去除结尾字符、空白符(包括\n、\r、\t、' ',即:换行、回车、制表符、空格)

with open("aa.txt") as fp:
    c=fp.read()
    print(c.rstrip())

文件路径

如果要读取的文件不在当前目录内,而是在当前目录的文件内,需要提供文件路径

windows下是这样的

逐行读取 

with open("aa.txt") as fp:
    for i in fp:
        print(i)


会发现输出变成这样了
123

456

789


为什么会有这么多空行呢

因为文件中每行有一个换行符,再加上print也会输出一个换行符。可以通过rstrip方法来消除文件行换行符

with open("aa.txt") as fp:
    for i in fp:
        print(i.rstrip())

创建一个包含文件各行内容的列表

with open("aa.txt") as fp:
    c=fp.readlines()
print(c)

输出结果是
['123\n', '456\n', '789\n']
可以使用rstrip来消除'\n'

json.load函数

可以将json格式文件中数据以字符串的形式读取出来

import json
fp = open('aa.txt','r')
a = json.load(fp)
print(a)

写入文件

with open('aa.txt','w') as fp:
    fp.write("123456")

将‘123456’写入aa.txt文件

注意w是指只写的方式打开文件,r的只读方式打开文件,r+是可读可写的方式打开文件,a是以接着上次的写,w是清空文件,之后再写。python默认方式是只读。

如果想写入多行的话,需要加上换行符

也可以使用库中的json.dump()函数

与write方法不同的时,json.dump()函数可以将写入文件的数据

自动转换为str类型。

列表和字典无法通过write存储到文件中,因此要使用json.dump()将字典转换为一种叫json格式来存储它

json.dump(x,y) x是要存的数据,y是文件对象

import json
a={'a':1,'b':2}
with open('aa.txt','w') as fp:
    json.dump(a,fp)

'''
aa.txt
{"a": 1, "b": 2}
'''

异常

程序在运行时,如果Python 解释器遇到到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常

程序停止执行并且提示错误信息这个动作,我们通常称之为:抛出(raise)异常

程序开发时,很难将所有的特殊情况都处理的面面俱到,通过异常捕获可以针对突发事件做集中的处理,从而保证程序的稳定性和健壮性

捕获异常

在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加try(尝试)来捕获异常

捕获异常最简单的语法格式:

try:
   尝试执行的代码
except:
   出现错误后的处理

try 下面编写要尝试的代码。

except 如果不是,下面编写尝试失败的代码

处理ZeroDivisionError异常

print(5/0)

这一条代码,python会报错

使用try-except

try:
    print(5/0)
except ZeroDivisionError:
    print("error")

意思是执行try中的语句,然后如果出错,就会执行except中的内容

在程序执行时,可能会遇到不同类型的异常,并且需要针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了

语法如下:

try:
  #尝试执行的代码
except 错误类型1:

except 错误类型2:

except Exception as result:
   print("未知错误 %s"% result)

举个例子

try:
    num = int(input("请输入整数:"))
    print(8/num)
except ValueError:
    print("请输入正确的整数")
except ZeroDivisionError:
    print("除 0 错误")

捕获未知错误

在开发时,要预判到所有可能出现的错误,还是有一定难度的

如果希望程序无论出现任何错误,都不会因为Python解释器抛出异常而被终止,可以再增加一个except

语法如下

except Exception as result:
   print("未知的错误 %s"%s result)

else 代码块

try:
  print(3/2)
except ZeroDivisionError:
  print("error")
else:
  print("no error")

如果try里的代码成功执行了,则执行else里的内容。

finally代码块

无论执行成功与否,都会执行finally代码块里的代码

完整代码展示

try:
  print(8/a)
except ZeroDivisionError:
  print("error")
except Exception as result:
   print("未知错误 %s"% result)
else:
   print("执行成功")
finally:
   print("无论执行是否成功,都会执行的代码")

输出结果

未知错误 name 'a' is not defined
无论执行是否成功,都会执行的代码

抛出raise异常

在开发中,除了代码执行出错Python解释器会抛出异常之外

还可以根据应用程序特有的业务需求主动抛出异常

示例

提示用户输入密码,如果长度少于 8,抛出异常

注意

当前函数只负责提示用户输入密码,如果密码长度不正确,需要其他的函数进行额外处理

因此可以抛出异常,由其他需要处理的函数捕获异常

4抛出异常

Python中提供了一个Exception异常类

在开发时,如果满足特定业务需求时,希望抛出异常,可以:

创建一个Exception的对象

使用raise关键字抛出异常对象

def input_password():
   pwd = input("请输入密码:")
   if len(pwd) >= 8:
      return pwd
   e = Exception("密码长度不够")

   raise e

try:
   user_pwd = input_password()
   print(use_pwd)
except Exception as result:
   print("发现错误:%s"%result)
发布了37 篇原创文章 · 获赞 3 · 访问量 2374

猜你喜欢

转载自blog.csdn.net/Stillboring/article/details/105324321