python中异常知识点

文章详细介绍了Python中的异常处理机制,包括如何捕获并处理单个异常、多个异常,以及如何打印和传递异常信息。同时,文章讨论了模块的导入方式,如import和from...import的区别,以及如何使用__all__变量控制导入行为。此外,还提到了包的概念,即功能相似的模块组织在一起的方式。
摘要由CSDN通过智能技术生成
  1. 异常概念(了解)

当python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的异常。

# 异常:程序运行过程中,代码遇到错误提示,给出错误的提示
print('其他的代码......')
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
num = 10 / int(num)
print('计算得到的结果是:', num)
print('其他代码...')

2.捕获单个异常(掌握)

"""
try:
    可能发生异常的代码
except 异常的类型:
     发生异常执行的代码
"""
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
try:
    num = 10 / int(num)
    print('计算得到的结果是:', num)
except ZeroDivisionError:
    print('输入有误')
print('其他代码...')

3.捕获多个异常(掌握)

# 法一:
# num = input('请输入一个数字:')
# # ZeroDivisionError: division by zero
# try:
#     a = int(num)
#     num = 10 / a
#     print('计算得到的结果是:', num)
# except (ZeroDivisionError, ValueError):
#     print('输入有误')
# print('其他代码...')
print('其他代码....')
num = input('请输入一个数字:')
try:
    a = int(num)
    num = 10 / a
    print('计算得到的结果是:', num)
except ZeroDivisionError:
    print('输入有误')
except ValueError:
    print('输入有误')
print('其他代码....')

4.打印异常信息(掌握)

"""
try:
  可能发生异常的代码
except  (异常的类型1,异常类型2,....)as 变量名 :
   发生异常执行的代码
   print(变量名)
"""
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
try:
    a = int(num)
    num = 10 / a
    print('计算得到的结果是:', num)
except (ZeroDivisionError, ValueError) as e:
    print('输入有误', e)
print('其他代码...')

5.捕获所有类型的异常(掌握)

try :
   可能发生异常的代码
except :  #缺点,不能获取异常的描述信息
   发生异常执行的代码

 
# --------------------------------------------------------------
try :
   可能发生异常的代码
except Exception as e:
   发生异常执行的代码
   print(e)
   pass
# Exception 是常见异常类的父类,
ZeroDivisionError-->ArithmeticError-->Exception-->BaseException-->object
num = input('请输入一个数字:')
# ZeroDivisionError: division by zero
try:
    a = int(num)
    num = 10 / a
    print('计算得到的结果是:', num)
except Exception as e:
    print('输入有误', e)
print('其他代码...')

6.异常的完整结构(掌握)

try :
   可能发生异常的代码
except Exception as e:
   发生异常执行的代码
   print(e)
else:
   代码没有发生异常,会执行
finally:
    不管有没有发生异常,都会执行
print('其他代码...')
num = input('请输入一个数字:')
try:
    a = int(num)
    num = 10 / a
    print('计算得到的结果是:', num)
except Exception as e:
    print('输入有误', e)
else:
    print('没有发生异常,我会会执行')
finally:
    print('不管有没有发生异常,我都会执行')
print('其他代码...')

7.异常的传递(理解)

是 python异常处理的底层机制,是原理层面上的,不需要我们自己写代码实现,是python 已经实现好的
异常传递:当一行代码发生异常之后,会向外层将这个异常进行传递,指导被捕获或者程序报错为止
1.try 嵌套
2.函数嵌套
print('其他代码...')
num = input('请输入一个数字:')
try:
    try:
        a = int(num)
    except ZeroDivisionError:
        print('发生异常')
    finally:
        print('不管有没有发生异常,我都会执行')
    num = 10 / a
    print('计算得到的结果是:', num)
except Exception as e:
    print(e)
print('其他代码...')
def func1():
    print('-----------1-------------')
    num = input('请输入数字')
    num = 10 / int(num)
    print('-----------2---------')


def func2():
    print('-------3------')
    func1()
    print('------------4--------')


try:
    print('------5--------')
    func2()
    print('---------------6-----------')
except Exception as e:
    print('-------7----------')
    print(e)

8.抛出自定义异常(理解)

程序为什么会报错?
因为不合法语法,因为python的作者在代码使用了if判断,如果出书为0,就会在代码中抛出异常错误,
抛出异常:
   raise 异常对象  # 当程序代码遇到 raise 的时候,程序就报错了
异常对象=异常类(参数)
抛出自定义类:
   1.自定义异常类,继承Exception 或者 BaseException
   2.选择书写,定义__init__方法,定义__str__方法
   3.在合适的时机抛出异常对象即可
class PasswordLengthError(Exception):


def get_password():  # 等同于系统定义函数
    password = input('请输入密码:')
    if len(password) >= 6:
        print('密码长度合格')
    else:
        # 抛出异常
        raise PasswordLengthError('密码长度不足6位')


try:
    get_password()  # 调用系统的函数
except PasswordLengthError as e:
    print(e)

9.模块

import random
random.randint(a,b) 产生[a,b]之间的随机整数,包含b的
import os

模块就是python1代码文件,是别人已经写好的代码文件,文件中的函数类以及变量,我们都可以使用
使用模块的好处:直接使用别人已经实现好的功能,

模块制作:

模块就是python文件
制作一个模块文件,其实就是定义一个Python代码文件
注意点:模块的名字要遵循标识符的规则(有字母,数字和下划线组成,不能以数字开头)
模块中可以定义变量,定义函数,定义类

10.模块的导入

1.想要使用模块中的内容,必须先导入模块
2.注意点:如果导入的是自己书写的模块,使用的模块和代码文件需要在一个目录中
# ----模块的导入-----
# 方法一:(推荐使用)
# import 模块名
# 使用:模块名.功能名
import my_modle1

print(my_modle1.num)  # 使用my_module1中的变量num
my_modle1.func()  # 调用my_module1中func函数
dog = my_modle1.Dog()  # 调用my_module1中的类创建对象
dog.show_info()

# 方法二:  from 模块名 import 功能名1,功能名2,......
# 使用:功能名
# 注意点:如果存在同名的方法名,则会被覆盖
# from my_modle1 import func, num
#
# print(num)
# func()

# 方法三: from 模块名 import * #将模块中所有的功能进行导入
#  使用:功能名(不推荐使用)
from my_modle1 import *

print(num)
func()
dog = my_modle1.Dog()
dog.show_info()

# as 起别名,可以对模块和功能起别名,
# 注意:如果使用as 别名,就不能在使用原来的名字

11.__all__变量(模块中的变量)

__all__ = ['num','func','Dog']
num = 1


def func():
    print('my_module1 func...')


class Dog(object):
    @staticmethod
    def show_info():
        print('这是一个Dog类,my_module1 dog')

    pass
"""
__all__变量,可以在每个代码文件中(模块中)定义,类型是元组,列表
作用:影响from 模块名 import *导入行为,另外两种导入行为不受影响
1.如果没有定义__all__变量,模块中的所有功能,都可以被导入
2.如果定义__all__变量,只能导入 变量中定义的内容
"""
from my_modle1 import *

print(num)
func()
dog = Dog()
dog.show_info()

12.模块的注意点

# 自己定义的模块名字,不要和系统中你要使用的模块名字相同
import random
# 模块的搜索顺序,当前目录 --->系统目录--->程序报错
print(sys.path)

a = random.randint(1, 5)
print(a)

13.包

包:功能相近或者相似的模块放在一个目录中,并在目录定义一个__init__.py文件,这个目录就是包。
# 方法一:import 包名.模块名
import my_package.mod2

my_package.mod2.func()
# 方法二:
from my_package.mod2 import func
from my_package.mod2 import *

func()
# 方法三:from 包名 import * #导入的是__init__.py中的内容
from my_package import *
func()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最初的梦10

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值