Python基础课--第十六节 异常&⽂件 遇到 运行python文件报SyntaxError: (unicode error) ‘unicodeescape‘ codec can‘t decode

本文详细介绍了Python中的异常处理机制,包括try-except-else-finally的使用,异常的传播与对象,以及如何自定义异常。同时,文章讲解了Python文件操作,包括打开、读取、关闭文件的方法,如何处理大文件,以及文件的写入和二进制文件的处理。还提到了读取文件位置和文件的其他操作,如目录操作。
摘要由CSDN通过智能技术生成

1 异常的简介

  • 程序在运⾏过程中可能会出现⼀些错误。⽐如: 没有赋值的变量,使⽤了不存在的索引,两个不同类型的数据相加…这些错误我们称之为异常
  • 处理异常 程序运⾏时出现异常,⽬的并不是让我们的程序直接终⽌!Python是希望在出现异常时,我们可以编写代码来对异常进⾏处理
  • 异常以后的代码都不会执行
    语法(try语句):
    try:
    代码块(可能会出现错误的语句)
    except 异常类型 as异常名:
    代码块(出现错误以后的处理方式)
    except 异常类型 as异常名:
    代码块(出现错误以后的处理方式)

    else:
    代码块(没有错误时要执行的语句)
    finally:
    代码块(是否有异常都会执行)
    try是必须的 else有没有都可以
    except和finally⾄少有⼀个
# try 语句
print('hello')
try:
    print(10/0)
except:
    print('出错了兄弟')
print('python')
结果
hello
出错了兄弟
python
# try 语句
print('hello')
try:
    print(10/2)
except:
    print('出错了兄弟')
else:
    print('程序正常执行,没有错误')
    
print('python')
结果
hello
5.0
程序正常执行,没有错误
python

2 异常的传播

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

    print('hello fn')
    print(10 / 0)

try:
    fn()

except:
    pass
 结果
 hello fn
def fn():

    print('hello fn')
    print(10 / 0)

def fn2():

    print('hello fn2')
    fn()

def fn3():

    print('hello fn3')
    fn2()

fn3()
结果
Traceback (most recent call last):
  File "D:/Users/RAZER/PycharmProjects/lect12-16/lect16/异常的传播.py", line 31, in <module>
    fn3()
hello fn3
  File "D:/Users/RAZER/PycharmProjects/lect12-16/lect16/异常的传播.py", line 29, in fn3
    fn2()
  File "D:/Users/RAZER/PycharmProjects/lect12-16/lect16/异常的传播.py", line 24, in fn2
hello fn2
    fn()
hello fn
  File "D:/Users/RAZER/PycharmProjects/lect12-16/lect16/异常的传播.py", line 19, in fn
    print(10 / 0)
ZeroDivisionError: division by zero
  • 当程序运行过程中出现异常以后,所有的异常信息会被专门保存到一个异常对象当中,而异常传播时,实际上就是异常对象抛给了调用处,NameError类(是个类<class ‘NameError’>)专门处理变量的错误

3 异常对象

  • except 后不跟任何内容,此时,他会捕获所有的异常
print('异常出现前')

try:
    print(a)
    print(10/0)
except:
    # except 后不跟任何内容,此时,他会捕获所有的异常
    print('处理异常的逻辑')

print('异常出现后')
结果
异常出现前
处理异常的逻辑
异常出现后
  • NameError只能捕获name异常
    开始时
print('异常出现前')

try:
    print(a)
    print(10/0)
except NameError:
    # except 后不跟任何内容,此时,他会捕获所有的异常
    # print('处理异常的逻辑')
    print('出现NameError异常了')

print('异常出现后'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值