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. [atAGC048F]01 Record

    先将这个序列翻转,贪心找到最长的'101010--'的形式的子序列并删除,重复此过程并记这些字符串长度依次为$l_{1},l_{2},...,l_{n}$,若最终还有字符剩余则一定无解 假设$S$中元 ...

  2. List、ArrayList、迭代器、链表、Vector

    1.List接口中的常用方法. List是Collection接口的子接口.所以List接口中有一些特有的方法. void add(int index, Object element) Object ...

  3. js防止重复提交代码

    if (checkSubmitFlg == true) { console.log("禁止频繁操作.."); layer.close(ide); return false; } c ...

  4. Codeforces 671C - Ultimate Weirdness of an Array(线段树维护+找性质)

    Codeforces 题目传送门 & 洛谷题目传送门 *2800 的 DS,不过还是被我自己想出来了 u1s1 这个 D1C 比某些 D1D 不知道难到什么地方去了 首先碰到这类问题我们肯定考 ...

  5. [Linux] 非root安装GCC9.1.0

    说明 一般Linux系统自带或公共的GCC版本都很低,如目前我们的服务器版本的GCC还停留在gcc-4.9.3,而官网已到达9.2版本(下载http://ftp.gnu.org/gnu/gcc/) , ...

  6. [Emlog主题] Monkey V3.0 优化修改

    原作者博客:https://blog.dyboy.cn/ Monkey V3.0 优化修改版 修改说明: 背景颜色修改(按个人喜好可自行修改,仿PCQQ午夜巴黎皮肤) 搜索框按钮样式优化,不那么突兀了 ...

  7. day9 文件处理

    day09 文件处理 一.注册与登录功能 username = input('请输入您的密码:').strip() password = input('请输入您的密码:').strip() f = o ...

  8. 商业爬虫学习笔记day4

    一.获取登录后页面信息的两种方法 1.第一种方法: 人为把有效cookies加到请求头中,代码如下 import urllib.request # 确定url url = "https:// ...

  9. 零基础学习java------day10------带包编译,权限修饰符,内部类,调式,junitTest

    0.  带包编译 解决使用notepad++编写的java类中如果有package的解决方案,如下代码 package com._51doit.test; class HelloWorld{ publ ...

  10. 100个Shell脚本——【脚本7】批量建立用户

    [脚本7]批量建立用户 编写shell脚本,批量建立用户user_00, user_01, ... user_100并且所有用户同属于users组. 一.脚本 #!/bin/bash group=`c ...