下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 21 | 异常的检测和处理
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

零基础学Python

共71讲 · 71课时·约540分钟
16024
免费
01 | Python语言的特点
免费
02 | Python的发展历史与版本
免费
03 | Python的安装
免费
04 | Python程序的书写规则
免费
05 | 基础数据类型
免费
06 | 变量的定义和常用操作
07 | 序列的概念
08 | 字符串的定义和使用
09 | 字符串的常用操作
10 | 元组的定义和常用操作
11 | 列表的定义和常用操作
12 | 条件语句
13 | for循环
14 | while循环
15 | for循环语句中的if嵌套
16 | while循环语句中的if嵌套
17 | 字典的定义和常用操作
18 | 列表推导式与字典推导式
19 | 文件的内建函数
20 | 文件的常用操作
21 | 异常的检测和处理
22 | 函数的定义和常用操作
23 | 函数的可变长参数
24 | 函数的变量作用域
25 | 函数的迭代器与生成器
26 | Lambda表达式
27 | Python内建函数
28 | 闭包的定义
29 | 闭包的使用
30 | 装饰器的定义
31 | 装饰器的使用
32 | 自定义上下文管理器
33 | 模块的定义
34 | PEP8编码规范
35 | 类与实例
36 | 如何增加类的属性和方法
37 | 类的继承
38 | 类的使用-自定义with语句
39 | 多线程编程的定义
40 | 经典的生产者和消费者问题
41 | Python标准库的定义
42 | 正则表达式库re
43 | 正则表达式的元字符
44 | 正则表达式分组功能实例
45 | 正则表达式库函数match与s...
46 | 正则表达式库替换函数sub...
47 | 日期与时间函数库
48 | 数学相关库
49 | 使用命令行对文件和文件夹...
50 | 文件与目录操作库
51 | 机器学习的一般流程与NumP...
52 | NumPy的数组与数据类型
53 | NumPy数组和标量的计算
54 | NumPy数组的索引和切片
55 | pandas安装与Series结构
56 | Series的基本操作
57 | Dataframe的基本操作
58 | 层次化索引
59 | Matplotlib的安装与绘图
60 | 机器学习分类的原理
61 | Tensorflow的安装
62 | 根据特征值分类的模型和代...
63 | 网页数据的采集与urllib库
64 | 网页常见的两种请求方式ge...
65 | HTTP头部信息的模拟
66 | requests库的基本使用
67 | 结合正则表达式爬取图片链...
68 | Beautiful Soup的安装和...
69 | 使用爬虫爬取新闻网站
70 | 使用爬虫爬取图片链接并下...
71 | 如何分析源代码并设计合理...
本节摘要

课程源码、课件及课后作业地址:

https://github.com/wilsonyin123/geekbangpython

精选留言(20)

  • 2018-10-16
    老师 我怎么能联系上您呢?我有点问题 关于自定义异常的部分?
    项目中要求写自定义异常,我搜到了写自定义异常的思路。我想用retry这个模块,比如tries=3,try3次,如果有异常 每次retry的时候都要更新一下DB的记录。我该怎么做呢?谢谢老师了

    作者回复: 这里需要考虑两个问题:1选择什么db?2在哪里执行插入db。
    1 选择不同的db需要使用不同的函数库,如果是实验可以考虑使用redis,操作和实验起来很简单,把插入db封装成一个函数
    2 在哪里调用呢?你可以找到retry的官方网站,会发现retry库有一种装饰器模式,也有一种使用retry_call的函数模式,但都不能直接写库,所以找到retry函数库的github,发现代码里面有except Exception as e:
    可以在这里添加你的函数。
    这是实现原理,看看你能否想到更优雅的实现方式呢?

    3
  • 2018-07-27
    老师你好,except后面跟的异常类型是否有一个通用的字段来表示?因为事先不清楚具体错误值,也不想罗列太多错误值,所以想问下是否有个通用的值来表示所有错误?

    作者回复: 使用
    except:
    写法就可以匹配其他异常了,但是建议写成except Exception as e:
    的形式,可以通过对e的输出了解具体产生的是哪种异常。

    3
  • 2018-10-15
    try:
          raise NameError('myError')
    except NameError as e:
          print(e)
    2
  • 2018-07-09
    finally 的演示这里,ide 有个警告说 file 未定义,这里是否会有问题呢?

    作者回复: 按照演示,如果open( )打开的文件不存在,是会直接被except捕获的,因此为变量赋值的语句不会执行,也就是finally的提示,变量未定义了。
    这是except捕获异常的正常流程,那要想解决打开文件不存在的方法怎么做呢,最常见的两种办法是:第一种是用open('文件名','a+')方式,使用a+属性,如果打开的文件不存在就自动创建文件;
    另一种规范的方法是打开文件之前通过os等系统相关的模块判断文件是否存在,还要判断存在的名称是文件还是文件夹,即:
    os.path.isfile('文件路径/文件名称')

    2
  • 2019-04-25
    老师,想请问您关于本节作业的问题。本节作业第一题中,要求‘’访问字典不存在的关键字‘’,我写了如下代码:
    ======
    dic1 = {'a':1,'b':'2'}
    try:
        i = dic1['c']
    except Exception as e:
        print(e)
    ======

    输出结果是:
    ======
    'c'

    Process finished with exit code 0
    ======
    想请问您为什么不输出 ‘KeyError’ 呢?
    展开

    作者回复: except Exception 是捕获所有的异常,输出是不会输出异常类的,只会输出异常的属性。

    1
  • 2019-01-23
    老师 我看你的实例开头没有加# coding=gbk,程序也能正常运行。
    我自己的就会报syntaxError这个错呢。
    1. try:
    2. year = int(input('input year:'))
    3. except ValueError as a:
    4. print("请输入数字")

    File "E:/pytest/exception_test.py", line 4
    SyntaxError: Non-UTF-8 code starting with '\xca' in file E:/pytest/exception_test.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

    Process finished with exit code 1
    展开

    作者回复: 您好,方便提供一下 操作系统和python的版本信息吗?
    如 windows7 python3.6
    我在windows10 python3.7 和mac下没有复现出您的问题。
    如果您在PyCharm环境下运行,尝试重新创建一个新的.py文件运行,并观察一下右下角文件的编码是否为utf8,如果是其他编码可以点击进行修改,看看这样能否解决您的问题。

    1
  • 2018-10-10
    #异常练习
    #未定义变量异常
    def fun(a,b):
        return print(a+b)

    fun(a,b)

    #访问列表不存在的索引
    list1=[1,2,3,4]
    print(list1[4])

    #访问字典不存在的关键字
    dic={"a":"aa","b":"bb"}
    print(dic["c"])

    #捕获错误

    try:
        a = (1, 2, 3, 4)
        print(a[4])
    except:
        print("索引错误")
    展开
    1
  • 2018-09-02
    演示时由于文件不存在造成finally里面出现未定义异常,Python中没有判断某个变量是否已定义的方法吗(比如JAVA中是否为null)?如果定义再关闭,不是就不会在finally里面再发生异常了吗

    作者回复: 这也是一个办法,但是判断的不完善,比如路径存在但是是个文件夹呢?所以通常我们会判断文件路径是否存在是否为文件,如果是文件或者文件不存在,则在目录下用a+模式打开(open)这个文件

    1
  • 2019-09-17
    try:
        a = open('name1.txt')
    except Exception as e:
        print(e)

    # finally:
    # a.close()

    如果name1.txt根本不存在的话,finally操作其实根本无法执行,又会多报一个错误,所以这个case finally操作无意义吧
    Traceback (most recent call last):
      File "/Users/maxuejiao/geekbangpython/python_demo/21/exception_handling.py", line 44, in <module>
        a.close()
    NameError: name 'a' is not defined //这个是final造成的
    [Errno 2] No such file or directory: 'name.txt'
    展开
  • 2019-09-07
    老师,我还是没太明白关键字raise的功能。

    课上说的是:如果觉得内置的错误类型不够的话,Python还可以自己定义错误的提示信息。那课上的这部分代码
    try:
        raise NameError('helloError')
    except NameError:
        print('my custom error')

    这部分代码的作用是不是可以理解为,从此再有NameError时显示的就是'my custom error’ ?

    但是我下方尝试写上a = b ,可是错误提示信息还是NameError: name 'b' is not defined 啊……

    那么到底如何自己定义呢?关键字raise到底有什么用呢?
    展开

    作者回复: 1 raise 引发的异常,每次只能引发一个异常实例
    2 程序自动引发的异常可以用try except 结构捕获,raise是开发者手动引发的异常,如:
    1>0 在程序一般逻辑中不会出现异常,一旦程序逻辑需要,就要手动触发异常--即显式引发异常
    try:
        must_be_int = 1
        if must_be_int > 0 :
            raise ValueError("输入的变量大于0")
    except Exception as e:
        print("raise抛出的信息",e)

  • 2019-07-15
    老师:我在pycharm(python3.7.2)中,执行这段代码:
    try:
        year = int(input('input year:'))
    except ValueError:
        print('请输入数字')

    报这个错:
    SyntaxError: Non-UTF-8 code starting with '\xc7'

    网上说要在文件开头加 # coding=gbk

    可是视频中你的代码并没有加上这句话?
    展开

    作者回复: 网上的说法不正确,两种办法解决
    1 开头增加 # -*-coding:utf8 -*- ,让python将这个文件当做utf-8字符集来处理
    2 在pycharm 右下角有个真正的文件编码,改为utf-8 重新加载这个文件

  • 2019-06-09
    老师您好,我在自己练习抓取多个异常时,发现,如果try模块里有多个异常时,只能抓第一异常。请问,是不是try语句下抓到第一个异常之后,程序就直接跳到except语句里。try语句第一个异常后面的代码就不会执行里。代码如下:(macos, python3.7.3)
    try:
       5/0
       #print('hello')
       a = 3
       b = '123'
       print(a + b)
    except (ZeroDivisionError,TypeError) as e:
       print(e)
    执行结果:division by zero 并没有出现type error的内容。实验里一下,在5/0下添加一个print语句,并不能输出。所以有个疑问,是不是一个try-except语句只能捕获一个异常,捕获到第一个异常后就直接跳到except语句了?求解答!谢谢!
    展开

    作者回复: 您好, try 和except 一定要一对一的使用,如果需要捕获多个异常一定要把他们进行嵌套使用,不能叠加。可以这样使用:
    try:
        try:
            raise SyntaxError
        except IndexError:
            print('Error demo')
    except SyntaxError:
        print('Error demo2')

  • 2019-05-20
    raise 是抛出一个error吗?运行try,如果没有error的话,就不会运行except部分,raise是不是让try后面的部分产生error对吗?老师

    作者回复: raise 是抛出一个自定义的异常;python自己定义了一套标准异常,出现问题就抛出来,要不要解决由编写代码的人来决定。当你在自己的业务逻辑也想用这种方式处理问题时,不用再开发一套异常处理框架,直接使用raise抛出你想要产生的异常,并且用来捕获处理就可以了。

  • 2019-02-05
    try:
        file = open("name.py")
    except Exception as e:
        print("open failed")
    finally:
        try:
            file.close()
        except NameError as nameError:
            print("NameError : %s" % nameError)
        print("close file")

    文件打开示例中,如果文件不存在,会执行except中的代码,而在finally中,file变量因为没有赋值,会报NameError,没有办法像Java那样,if (file != null) { file.close() } 吗?
    展开

    作者回复: 用with open() 方式,不用自己编写,Python已经实现了这个功能了

  • 2018-12-09
    老师这样写可以不?

    filename = ‘date.txt’

    with open(filename, 'w') as file_object:
        file_object.write('2018年12月32日')

    with open(filename) as file_object:
        print(file_object.read(4))
    展开

    作者回复: 你要实现哪些功能呢?

  • 2018-11-21
    打卡第5天,想睡觉,不过要坚持
  • 2018-11-21
    打卡第5天
  • 2018-11-10
    老师如何用input()只让输入浮点数,如果不是浮点数就重复直到为浮点数
    while True:
        try:
            x = float(input('输入小数'))
        except Exception:
            print('请输入小数')
        if type(x)==float:
            break
    我这段有什么不对吗
    展开
  • 学习了
  • 2018-07-28
    老师您好,使用try except finally时,要是finally中的代码抛出异常了要怎么办呢

    作者回复: 把finally放在另一个try结构里面
    try:
        try:
            'a' + 1
        except:
            print('exception1')
        finally:
            print('最后一口气')
            'a' + 2

    except:
        print('exception2')

    注意缩进