1.初识异常

1.1.什么是异常与异常处理

  • 异常就是错误
  • 异常会导致程序崩溃并停止运行
  • 能监控并捕获异常,将异常部位的程序进行修理使得程序继续正常运行

1.2.异常的语法

 1 # coding:utf-8
2
3 def upper(str_data):
4 new_str='None'
5 try:
6 new_str=str_data.upper()
7 except:
8 print('程序出错了')
9 return new_str
10
11 result=upper(123)
12 print(result)
13 '''
14 程序出错了
15 None
16 '''

1.3.捕获通用异常

 1 # coding:utf-8
2
3 def upper(str_data):
4 new_str='None'
5 try:
6 new_str=str_data.upper()
7 except Exception as e:
8 print('程序出错了:{}'.format(e))
9 return new_str
10
11 result=upper(123)
12 print(result)
13 '''
14 程序出错了:'int' object has no attribute 'upper'
15 None
16 '''

1.4.捕获具体异常

 1 # coding:utf-8
2
3 def test():
4 try:
5 print("try start")
6 1/0
7 print("try finish") #这句代码不会执行,因为1/0已经报错了,直接进入到exception中了
8 except ZeroDivisionError as e:
9 print(e)
10 test()
11 '''
12 try start
13 division by zero
14 '''
 1 # coding:utf-8
2
3 def test():
4 try:
5 print("try start")
6 print(name)
7 print("try finish")
8 except ZeroDivisionError as e: #except捕获的异常要与实际发生的异常一致,才能捕获到,不然没有用;捕获的是1/0的报错,实际发生的错误是name变量未定义
9 print(e)
10 test()
11 '''
12 Traceback (most recent call last):
13 File "D:/WorkSpace/Python_Study/test01.py", line 10, in <module>
14 test()
15 File "D:/WorkSpace/Python_Study/test01.py", line 6, in test
16 print(name)
17 NameError: name 'name' is not defined
18 try start
19 '''

1.5.捕获多个异常

2.python内置异常函数

异常类型集合
异常名称 说明
Exception 通用异常类型(基类)
ZeroDivisionError 不能整除0
AttributeError 对象没有这个属性
IOError 输入输出操作失败
IndexError 没有当前的索引
KeyError 没有这个键值(key)
NameError 没有这个变量(未初始化对象)
SyntaxError Python语法错误
SystemError 解释器的系统错误
VauleError 传入的参数错误

3.异常中的finally

finally的功能:

  • 无论是否发生异常,一定会执行的代码块
  • 在函数中,即便在try或except中进行了return也依然会执行finally语法快
  • try语法至少要伴随except或finally中的一个
  • 语法:

    try:
    
        <>
    
    except:
    
        <>
    
    finally:
    
        <>
 1 # coding:utf-8
2
3 def test():
4 try:
5 return "try"
6 except:
7 return "except"
8 finally:
9 return "finally"
10
11 print(test()) #finally

4.自定义异常

4.1.自定义抛出异常raise

raise:将信息以报错的形式抛出

 1 # coding:utf-8
2
3 def test(number):
4 if number==100:
5 raise ValueError("number不能等于100")
6 return number
7 print(test(50)) #50
8 print(test(100))
9 '''
10 Traceback (most recent call last):
11 File "D:/WorkSpace/Python_Study/test01.py", line 8, in <module>
12 print(test(100))
13 File "D:/WorkSpace/Python_Study/test01.py", line 5, in test
14 raise ValueError("number不能等于100")
15 ValueError: number不能等于100
16 '''
 1 # coding:utf-8
2
3 # 知识点1:raise主动抛出的异常可以被正常捕获
4 def test(number):
5 if number==100:
6 raise ValueError("number不能等于100")
7 return number
8
9 def test1(number):
10 try:
11 return test(number)
12 except ValueError as e:
13 return e
14
15 print(test1(100)) #number不能等于100
 1 # coding:utf-8
2
3 # 知识点2:raise语法后面没有进行异常类型的传递,直接跟字符串,编译器报错,必须得加,如果不知道异常类型,使用基类Exception
4 def test():
5 raise "报错了"
6
7 print(test())
8 '''
9 Traceback (most recent call last):
10 File "D:/WorkSpace/Python_Study/test01.py", line 7, in <module>
11 print(test())
12 File "D:/WorkSpace/Python_Study/test01.py", line 5, in test
13 raise "报错了"
14 TypeError: exceptions must derive from BaseException
15 '''

4.2.自定义异常类

 1 # coding:utf-8
2
3 class NumberLimitError(Exception):
4 def __init__(self,message):
5 self.message = message
6
7 class NameLimitError(Exception):
8 def __init__(self,message):
9 self.message = message
10
11 def test(name):
12 if name=="张三":
13 raise NameLimitError("张三不可以被填写")
14 return name
15
16 def test1(number):
17 if number > 100:
18 raise NumberLimitError("数字不能大于100")
19 return number
20
21 try:
22 test("张三")
23 except NameLimitError as e:
24 print(e)
25 '''
26 张三不可以被填写
27 '''
28
29 try:
30 test1(105)
31 except NumberLimitError as e:
32 print(e)
33 '''
34 数字不能大于100
35 '''

5.断言

5.1.断言的功能---assert

assert断言:用于判断一个表达式,在表达式条件为false时触发异常

  • raise是生硬的抛出异常
  • assert是先进行判断然后根据结果决定是否抛出

5.2.断言得用法---assert

 1 # coding:utf-8
2
3 def test(name):
4 assert name in ["张三","李四"],"{}不在学生列表中".format(name)
5 print("{}在学生列表中".format(name))
6 test("张三") #张三在学生列表中
7 test("王五")
8 '''
9 Traceback (most recent call last):
10 File "D:/WorkSpace/Python_Study/test01.py", line 7, in <module>
11 test("王五")
12 File "D:/WorkSpace/Python_Study/test01.py", line 4, in test
13 assert name in ["张三","李四"],"{}不在学生列表中".format(name)
14 AssertionError: 王五不在学生列表中
15 '''

6.python中的调试方法

百度一搜一大堆,我给大家分享一下我看的资料,比较老了,但是很全,最新版的Pycharm可以适用里面的操作

https://blog.csdn.net/pansaky/article/details/85165609?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.opensearchhbase&spm=1001.2101.3001.4242.2

Python基础入门(7)- Python异常处理机制的更多相关文章

  1. Python基础系列讲解——try_except异常处理机制

    在Python编程中不可避免的会出现错误,在调试阶段出现语法之类的错误时,Pycharm会在Debug窗口提示错误,但是程序在运行时由于内部隐含的问题而引起错误,会导致程序终止执行.比如以下例程中,使 ...

  2. Python基础入门知识点——Python中的异常

    前言 在先前的一些章节里你已经执行了一些代码,你一定遇到了程序“崩溃”或因未解决的错误而终止的情况.你会看到“跟踪记录(traceback)”消息以及随后解释器向你提供的信息,包括错误的名称.原因和发 ...

  3. Python基础入门教程

    Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...

  4. 【Python教程】《零基础入门学习Python》(小甲鱼)

    [Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609

  5. 《零基础入门学习Python》【第一版】视频课后答案第001讲

    测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...

  6. 零基础入门学习Python(1)--我和Python的第一次亲密接触

    前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...

  7. 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...

  8. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  9. Python基础入门总结

    Python基础入门教学 基础中的基础 列表.元组(tuple).字典.字符串 变量和引用 函数 python视频教程下载 基础中的基础 解释型语言和编译型语言差距: Python概述 解释器执行原理 ...

  10. [新手必备]Python 基础入门必学知识点笔记

    Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...

随机推荐

  1. [loj3315]抽卡

    令$S$表示对于某一种抽卡顺序中某一段长度为$k$的段全部被抽到的时间(这里没有期望)所构成的集合,根据$min-max$容斥的公式,有$E(\min(S))=\sum_{T\subseteq S}( ...

  2. IDE 常用配置

    启动进入欢迎页(项目选择页),而非直接进入项目 File > Settings > Appearance & Behavior > System Settings 在Star ...

  3. 为什么Mysql用B+树做索引而不用B-树或红黑树

    B+树做索引而不用B-树 那么Mysql如何衡量查询效率呢?– 磁盘IO次数. 一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上. ...

  4. os.path.join()函数

    连接两个或更多的路径名组件 import os p1 = '/date' p2 = 'mage' p3 = 'img' all = os.path.join(p1,p2,p3) print(all) ...

  5. wireshatk_teach

    wireshark抓包新手使用教程 Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息.常用于开发测试过程各种问题定位.本文主要内容包括: 1.Wiresha ...

  6. Oracle-where exists()、not exists() 、in()、not in()用法以及效率差异

    0.exists() 用法: select * from T1 where exists(select 1 from T2 where T1.a=T2.a) 其中 "select 1 fro ...

  7. LearnPython_week4

    1.装饰器2.生成器3.迭代器4.内置方法5.可序列化6.项目规范化 1.装饰器 # -*- coding:utf-8 -*- # Author:Wong Du ### 原代码 def home(): ...

  8. 错误笔记: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration di

    亲测可用 --jack alexander@alexander-virtual-machine:~$ sudo apt-get install -y httpdE: Could not get loc ...

  9. .Net调用Java的实现方法

    一. IKVM 1.1下载配置IKVM 1.1.1. 下载路径 http://www.ikvm.net/index.html 1.1.2. 设置路径 解压ikvm-0.42.0.3.zip,并将%IK ...

  10. MapReduce04 框架原理Shuffle

    目录 2 MapReduce工作流程 3 Shuffle机制(重点) 3.1 Shuffle机制 3.2 Partition分区 默认Partitioner分区 自定义Partitioner分区 自定 ...