基础十五:异常和文件

一、异常的简介

程序在运行过程中不可避免会出现一些错误
比如:使用了没有赋值过的变量 除0 使用了不存在的索引…
这些错误在程序中我们就称之为异常
程序在运行过程中,一旦出现异常会导致程序立即终止 异常后面的代码都不会执行

print(b)  #NameError: name 'b' is not defined

处理异常
程序出现异常,目的并不是要程序立即终止
Python是希望在出现异常时,我们可以编写代码对异常进行处理

语法:
try语句
try:
    代码块(可能会出现错误的语句)
except 异常类型 as异常名:
    代码块(出现错误以后的处理方式)
except 异常类型 as异常名:
    代码块(出现错误以后的处理方式)
except 异常类型 as异常名:
    代码块(出现错误以后的处理方式)
except 异常类型 as异常名:
    代码块(出现错误以后的处理方式)
.....
else:
    代码块(没有错误时要执行的语句)
finally:
    代码块(是否有异常都会执行)
try:
    print(20/2) # try中放置有可能出现错误的代码
except:
    print('出错啦哥们!!!!') # except中放置的是出错以后的处理方式
else:
    print('程序没有错误正常执行....') # else没有错误执行的语句
print('hello')
'''
10.0
程序没有错误正常执行....
hello
'''

try:
    print(20/0) # try中放置有可能出现错误的代码
except:
    print('出错啦哥们!!!!') # except中放置的是出错以后的处理方式
else:
    print('程序没有错误正常执行....') # else没有错误执行的语句
print('hello')
'''
出错啦哥们!!!!
hello
'''

二、异常的传播

当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再传播,
如果函数中没有对异常进行处理,则异常会继续像函数调用处传播
如果函数调用处处理了异常,则不再传播,如果没有处理则继续像调用处传播
直到传递到全局作用域,如果依然没有处理,则程序终止,并且显示异常信息

# print(20 / 0)
def fn():

    print('hello.........')
    print(20 / 0)


try:
    fn() # hello.........
except:
    pass

当程序运行过程中出现异常以后,所有的异常信息会被专门保存到一个异常对象当中
而异常传播时,实际上就是异常对象抛给了调用处
NameError类专门处理变量的错

def fn():

    print('hello fn')
    print(20 / 0)
    # print(c)

def fn2():
    print('hello fn2')
    fn()

def fn3():
    print('hello fn3')
    fn2()

# fn3()
'''
Traceback (most recent call last):
hello fn3
  File "D:/python_pycharm/study_base/基础知识笔记/异常和文件_1029.py", line 105, in <module>
    fn3()
hello fn2
  File "D:/python_pycharm/study_base/基础知识笔记/异常和文件_1029.py", line 103, in fn3
    fn2()
hello fn
  File "D:/python_pycharm/study_base/基础知识笔记/异常和文件_1029.py", line 99, in fn2
    fn()
  File "D:/python_pycharm/study_base/基础知识笔记/异常和文件_1029.py", line 94, in fn
    print(20 / 0)
ZeroDivisionError: division by zero
'''
# print(c)
print(NameError) #<class 'NameError'>

三、异常对象

print('异常出现前')
#
lst = []
try:
    print(20 / 0)
    # print(a)
    #
    # l[0]

except NameError:
    # 如果except后面不跟任何内容,则此时会捕获到所有的异常
    # 如果except后面跟着一个异常类型,那么此时它只会捕获该类型的异常
    # print('处理异常的逻辑..')
    print('出现 NameError 异常')
except ZeroDivisionError:

    print('出现 ZeroDivisionError 异常')
# Exception 是所以异常类的父类 所以如果except后跟的是Exception 它会捕获到所有的异常
except Exception as e:

    print('出现异常了',e,type(e))

finally:
    print('无论是否出现异常 都会执行')


print('异常出现后')
'''
出现 ZeroDivisionError 异常
无论是否出现异常 都会执行
异常出现后
'''

四、 自定义异常对象

抛出异常
可以是用raise语句来抛出异常
raise语句后面需要跟一个异常类或者是异常的实例
抛出异常的目的,告诉调用者这里调用时可能出现问题,希望你自己处理下

定义异常类 只需要继承Exception就可以了
class MyError(Exception):

    pass
# 定义异常类 只需要继承Exception就可以了
class MyError(Exception):

    pass



def add(a,b):
    # 如果a b中有负数,就像调用处抛一个异常
    if a < 0 or b < 0 :

        # raise Exception('参数中不能有负数')
        raise MyError('自定义异常信息')
    r = a + b
    return r

# print(add(-1,2))
'''
Traceback (most recent call last):
  File "D:/python_pycharm/study_base/基础知识笔记/异常和文件_1029.py", line 183, in <module>
    print(add(-1,2))
  File "D:/python_pycharm/study_base/基础知识笔记/异常和文件_1029.py", line 179, in add
    raise MyError('自定义异常信息')
__main__.MyError: 自定义异常信息

'''
print(add(1,2)) #3

文件(File)

通过Python来对计算机中的各种文件进行增删改查的操作

I/O(Input/Output)

一、文件打开

操作文件的步骤:	
1 打开文件
2 对文件进行各种操作(读、写)
3 关闭
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
使用open()函数来打开一个文件
参数:
file 要打开文件的名字(路径)

返回值:返回的是一个对象,这个对象就是代表了当前打开的文件

二、 关闭文件

如果目标文件和当前文件在同一级目录下,则直接使用文件名即可打开
	关闭文件
close()方法用来关闭文件
read()方法用来读取文件中的内容
file_obj.close()

file_obj.read()
file_name = 'demo.txt'
file_name1 = 'C:/Users/Administrator/Desktop/hello.txt'

file_obj = open(file_name)
# file_obj = open(file_name1) #FileNotFoundError: [Errno 2] No such file or directory: 'C:/Users/Administrator/Desktop/hello.txt'

# read()方法来读取文件的内容,它会将内容全部保存到一个字符串返回
content = file_obj.read()

print(content) #的哦莫


# 关闭文件
# close()方法用来关闭文件

file_obj.close()

# file_obj.read()

# with ... as 语句
file_name = 'abc'

try:
    with open(file_name) as file_obj:

        # 在 with语句中可以直接使用file_obj来操作文件
        # 此时这个文件只能在with中使用,一旦with结束文件则会自动close()关闭
        print(file_obj.read())
except FileNotFoundError:

    print(f'{file_name} 文件不存在...')

'''
abc 文件不存在...
'''
# 标注的一个操作文件的代码
try:
    with open('xxx') as file_obj:

        pass
except FileNotFoundError:
    pass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值