异常处理和模块

277 阅读2分钟

异常处理和模块

异常处理

异常:

  • 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

  • 一般情况下,在Python无法正常处理程序时就会发生一个异常。

  • 异常是Python对象,表示一个错误。

  • 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

异常的分类:
异常名称描述
AttributeError对象没有这个属性
OSError操作系统错误
ImportError导入模块/对象失败
IndexError序列中没有此索引(index)
KeyError没有这个键
NameError未声明/初始化对象 (没有属性)
SyntaxErrorPython 语法错误
TypeError对类型无效的操作
ValueError传入无效的参数
Warning警告的基类
处理异常语法:try...except....
try:
    可能会发送错误的语句
except:
    发生错误后执行的语句
例如:
try:
    print(name)
except NameError:
    print("发生错误")
捕获多个异常:
try:
    print(1 / 0)
except (NameError, ZeroDivisionError):
    print('有错误')
异常处理中的else语法:

else表示的是如果没有异常要执⾏的代码。

try:
    print(123 + "456")
except Exception:
    print(456)

else:
    print(789)
异常处理中的finally语法:

finally表示的是⽆论是否异常都要执⾏的代码,例如关闭⽂件。

try:
    f = open("test.txt", "r")
    print("没有异常,正常创建")
except Exception:
    print("出现异常,重新创建")
    f = open("test.txt", "w")
finally:
    f.close()
自定义异常
  • 自定义异常类,必须要继承Exception,并且包含init和str魔术方法(设置异常描述)

  • 在Python中,抛出⾃定义异常的语法为 raise 异常类对象 。

class Error_Exception(Exception):
    def __init__(self, username, password, password_len):
        self.username = username
        self.password = password
        self.password_len = password_len

    def __str__(self):
        return f"账号为:{self.username},密码为{self.password},密码长度为{len(self.password)}," \
               f"不能小于{self.password_len}"


def try1():
    try:
        password_len = 6
        username = input("请输入账号:")
        password = input("请输入密码:")
        if len(password) < password_len:
            raise Error_Exception(username, password, password_len)
    except Exception as exc:
        print(exc)
    else:
        print("账号创建成功")


try1()

as:,它只声明了一个将保存exception对象的变量。如果说except Exception as e,那么e将是Exception类型的对象。

模块

模块的导入:

  • import 模块名
  • from 模块名 import 功能名
  • from 模块名 import
  • import 模块名 as 别名
  • from 模块名 import 功能名 as 别名

制造模块

在Python中,每个Python⽂件都可以作为⼀个模块,模块的名字就是⽂件的名字。也就是说⾃定义模块名必须要符合标识符命名规则。

  • 如果⼀个模块⽂件中有 all 变量,当使⽤ from xxx import * 导⼊时,只能导⼊这个列表中的元素。
__all__ = ['testA']
def testA():
     print('testA')
def testB():
     print('testB')

制作包

步骤:[New] — [Python Package] — 输⼊包名 — [OK] — 新建功能模块(有联系的模块)。

导入包
# 方法一
import 包名.模块名
包名.模块名.⽬标
# 方法二
# 注意:必须在 __init__.py ⽂件中添加 __all__ = [] ,控制允许导⼊的模块列表。
from 包名 import *
模块名.⽬标