ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python异常基础(一)

2021-09-28 10:05:49  阅读:137  来源: 互联网

标签:错误 Python 捕获 基础 except try print 异常


文章目录(PS:觉得不错请点赞收藏支持一下)

一、异常基础

1.1 错误

在敲写代码过程中,相信很多人都碰过壁,因为总是要出错的嘛,出现错误不要急躁,一步一步去调试,当你解决了这个问题,你会发现快乐加倍

  • 错误分为两种
    • 语法错误
    • 异常
  1. 语法错误
while True
    print('hello')

# 报错信息: SyntaxError: invalid syntax   
!!意思是无效语法!!

不过现在的编辑器做的都很好,语法错误都会给出提示,能更好的避免这些问题。

  1. 异常
  • 概述:代码编写阶段没有问题,代码运行阶段出现了错误,Python 解释器会抛出异常错误信息。
  • 举例:

res = open('aa.txt','r')
print(res.read())

# 报错信息: FileNotFoundError: [Errno 2] No such file or directory: 'aa.txt'
什么意思呢?  大概意思就是当前目录没有此文件

1.2 处理异常

想一想,我们应该需要做什么呢?

如果想对异常进行处理,需要:
1. 让异常信息不要显示在页面上
2. 能够获取异常信息,然后针对性的进行处理,如写入日志文件等

那我们该如何操作呢?别急,Python 编程语言呢有内置的方法,我来教你

如何获取异常信息?
使用 try...except 组合进行处理
1. 将可能发生异常的代码放到 try 中
2. 使用 except 捕获异常: 意思就是 try 中的代码一旦出错,就自动跳转到 except 中; 
如果 try 中的代码没有发生错误,则不执行 except 中的代码

# 语法
try:
	代码
except 异常类型:
	代码

方法告诉你了,让我们来动手写一写

try:
    res = open('aa.txt', 'r')
except:
    print('出错了')
    
# 运行结果: 出错了
是不是控制台没有出现红色的信息,感觉很舒适了一些~

二、捕获异常

2.1 内置异常类型

不给大家一个一个举例子了,直接看图,这些是我总结的一些比较常见的异常类型,眼熟它即可,因为时间很长,你要与它陪伴很久很久~

ZeroDivisionError   除零错误

TypeError          类型错误

AttributeError  属性错误

NameError     变量名错误

SyntaxError    语法错误

KeyError    字典键名错误

IndexError  索引错误

IndentationError  缩进错误

TabError 空格和Tab混用

OSError 系统错误

ValueError    传入无效的参数

2.2 捕获指定异常

慢下来,思考一下,Python 开发者为什么要内置异常类型呢?

# 为什么要内置异常类型
如果仅仅使用 try...except 虽然可以捕获异常,但是无法知道具体的异常信息,非常不利于后面处理错误,在 except 后面加上异常类型,就可以捕获到指定的异常信息

举一个变量类型异常的例子吧

try:
    print(number)
except NameError:
    print('没有定义变量')
# 运行结果: 没有定义变量
咱们这里只是举个简单的例子方便大家理解,在编辑器敲写时,number 变量就已经标注红色了

2.3 捕获多个指定异常

虽然捕获了指定的异常,但是却无法捕获其他的异常,怎么办? Python 开发者前辈早已开发好了方法供我们使用

try:
    print(number)
except (ZeroDivisionError,FileNotFoundError,NameError):
    print('发生错误')
    
# 运行结果: 发生错误

2.4 捕获所有异常

看到标题是不是在想,wcnb,多么的人性化,学了之后是真的快乐加倍

try:
    print(number)
except Exception:
    print('发生了错误')
    
# 运行结果: 发生了错误

2.5 捕获异常描述信息

上述案例,无论是哪种错误,最后输出的结果都是自己先写好的,那可不可以获取不同异常的错误信息呢? 答案是可以的,Python 【yyds】

1. 语法

# 
try:
	代码
except 异常类型 as xx:
	代码

2. 举例

# 例1
try:
    print(number)
# as 声明后面的变量名,变量名可以随意命名,意思就是将 Exception 捕获的异常错误信息赋值给了 result, 然后 print 输出就可以了
except Exception as result:  
    print(result)
    
# 运行结果: name 'number' is not defined

# 例2
try:
    print(10 / 0)
except Exception as result:
    print(result)

# 运行结果: division by zero

2.6 异常的 else方法 和 finally 方法

相信 else 方法大家都不陌生,条件判断语句 if esle 写了太多次了,几乎离不开它,那它的作用在异常里面又是怎样的呢?

1. 结构

try:
	可能发生错误的代码
except:
	如果出现异常执行的代码
else:
	没有出现异常要执行的代码
finally:
	无论是否出现异常都要执行的代码
	

2. 举例

try:
    print('hello')
except Exception as result:
    print(result)
else:
    print('代码正常执行')
finally:
    print('我每次都要执行')
    

三、异常嵌套

嵌套这个词,几乎前面每次讲一个知识,都会有嵌套,比如: if嵌套语句,for 循环嵌套语句,while循环嵌套语句,列表嵌套,字典嵌套…等等,异常也如它们一样。

# 例1
"""
首先让用户输入年龄,正常的话则继续让用户输入身高,不正常则捕获异常,这个举例有些勉强,为了简单的向大家介绍 异常嵌套,就先这样吧,往后当你工作时,你会常用到的。
"""
try:
    age = int(input('输入年龄:'))
    try:
        height = int(input('输入身高(cm):'))
    except:
        print('身高输入有误')
    else:
        print(f'年龄:{age},身高:{height}')
except:
    print('年龄必须是数字')

四、自定义异常

如何使用?

  • 创建自定义异常类,继承 Exception
  • 重写 __str__方法,返回错误描述信息
  • 使用 raise 抛出自定义异常
    1. 语法
raise 异常类对象

2. 举例

class ShorInputError(Exception):
    def __str__(self):
        # 返回 如果密码长度 < 3 时要向用户展示错误信息
        return f'密码长度不能小于3'

try:
    password = input('输入密码:')
    if len(password) < 3:
        """
        raise 后面跟一个异常类型的实例,用于抛出此类型的异常,好让 except 捕获异常
        也就是说,将代码的控制权移交给 except
        """
        raise ShorInputError()
except Exception as result:
    # result 就是自定义异常类中 str 方法返回的错误信息
    print(result)

标签:错误,Python,捕获,基础,except,try,print,异常
来源: https://blog.csdn.net/m0_58040147/article/details/120522990

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有