博客
关于我
python 0基础 第十二节 异常处理
阅读量:544 次
发布时间:2019-03-09

本文共 1366 字,大约阅读时间需要 4 分钟。

一. 错误与异常

1. 错误

错误是代码不符合解释器或编译器的语法要求。

2. 常见异常

下面是Python中的几种常见异常及其原因:

  • AttributeError:属性错误,特性引用和赋值出现错误。
  • NameError:试图访问的变量不存在。
  • SyntaxError:代码存在语法错误。
  • KeyError:使用的映射中不存在的关键字。
  • IndexError:索引超出序列范围。
  • TypeError:内建操作或函数应用了错误的类型。
  • ValueError:传给对象的参数类型不正确。

3. 异常结构

所有异常都是/baseexception/的子类,主要分为以下几种:

  • SystemExit:程序退出。
  • KeyboardInterrupt:用户手动中断。
  • GeneratorExit:生成器完成。
  • Exception:普通异常。

4. 错误回溯

通过错误回溯可以查看错误的原因、执行行数以及具体代码。例如,结合下图可以看到错误发生在文件中的某一行某次操作。

5. 异常处理

A. 基本语法

使用try-except结构来捕捉和处理异常:

try:    # 可能出现错误的代码except:    # 捕捉到异常的处理方案
B. 捕获具体异常

当已知具体异常类型时,可以如下捕获:

try:    print(a)except NameError as e:    print(f'捕获异常如下:{e}')

此时如果a未定义,会输出捕获异常如下:name 'a' is not defined

C. 捕获多种异常

可以在一个except中捕获多个异常:

try:    # 可能出现错误的代码except (TabError, NameError):    # 捕捉到异常的处理方案
D. 不确定异常类型时

使用Exception作为捕获范围:

try:    # 可能出现错误的代码except Exception:    # 捕捉到异常的处理方案

6. Exception 补充

  • 所有代码中的异常都是Exception的子类。
  • 异常的捕获是从上到下依次对比,找到第一个匹配项,不会继续往后查找。

7. 进阶异常处理

结合try-except-else-finally结构处理异常:

try:    # 可能出现错误的代码except Exception as e:    # 捕捉到异常的处理方案else:    # 没有异常执行finally:    # 不管是否出现错误都会执行

二. 主动抛出异常

1. 主动抛出异常

可以使用raise关键字主动抛出异常:

raise ValueError('自定义错误信息')
2. 自定义异常

可以创建自己定义的异常类继承自Exception

class CustomException(Exception):    passraise CustomException('自定义错误')

三. 断言

  • 断言是代码中强制要求条件满足的设计。
  • assert后面跟条件,条件不满足会抛出AssertionError,同时可以传递错误信息。
  • 示例:判断1是否等于2,结果为false,抛出错误:
    assert 1 == 2, '1不等于2'

    结果为AssertionError: 1不等于2

转载地址:http://sowsz.baihongyu.com/

你可能感兴趣的文章
pdf转图片、提取pdf文本、提取pdf图片
查看>>
springCloud整合RabbitMQ实现消息中间件
查看>>
pdo sqlserver
查看>>
SpringCloud实战(十一)-更优的分布式配置解决方案(Apollo)
查看>>
PDO中捕获SQL语句中的错误
查看>>
SCP和SFTP相同点和区别
查看>>
peek和pop的区别
查看>>
Pelemay 项目教程
查看>>
Penetration Testing、Security Testing、Automation Testing
查看>>
Pentaho业务分析平台 SQL注入漏洞复现
查看>>
PentestGPT:一款由ChatGPT驱动的强大渗透测试工具
查看>>
PEP 8016 获胜,成为新的 Python 社区治理方案
查看>>
PEP8规范
查看>>
PEPM Cookie 远程代码执行漏洞复现(XVE-2024-16919)
查看>>
Percona Server 5.6 安装TokuDB
查看>>
SpringBoot(十四)整合MyBatis
查看>>
percona-xtrabackup 备份
查看>>
Perfect,华为爆出 Redis 宝典,原来 Redis 性能可压榨到极致
查看>>
SpringBoot集成OpenOffice实现doc文档转html
查看>>
Perl Socket传输(带注释)
查看>>