栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python复习笔记——异常处理结构

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python复习笔记——异常处理结构

Python复习笔记——异常处理结构

文章目录
  • Python复习笔记——异常处理结构
    • try except结构
    • 带有多个except的try结构
    • try except finally结构
    • 断言与上下文管理

  • 简单地说,异常是指程序运行时引发的错误,引发错误的原因有很多,例如除零、下标越界、文件不存在、网络异常、类型错误、名字错误、字典键错误、磁盘空间不足,等等
  • 如果这些错误得不到正确的处理将会导致程序终止运行,而合理地使用异常处理结构可以使得程序更加健壮,具有更强的容错性,不会因为用户不小心的错误输入或其他运行时原因而造成程序终止
  • 也可以使用异常处理结构为用户提供更加友好的提示
try except结构
try:
	    try块			       #被监控的语句
except Exception[ as reason]:
	    except块		             #处理异常的语句
  • 需要捕获所有异常时,可以使用BaseException
	try:
	    try块
	except BaseException as e:       #不建议这样做
	    except块......		       #处理所有错误 
  • except子句可以在异常类名字后指定一个变量
>>> try:
    raise Exception('spam', 'eggs')
except Exception as inst:
    print(type(inst))    # the exception instance
    print(inst.args)     # arguments stored in .args
    print(inst)          # __str__ allows args to be printed directly,
                         # but may be overridden in exception subclasses
    x, y = inst.args     # unpack args
    print('x =', x)
    print('y =', y)
   

('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs
  • 如果try中的代码抛出了异常并被except捕获,就执行except块;如果try中的代码没有抛出异常,就执行else块
a_list = ['China', 'America', 'England', 'France']
while True:
    n = input('请输入字符串的序号:')
    try:
        n = int(n)
        print(a_list[n])
    except IndexError:
        print('列表的下标必须为[0,3]之间的整数')
    else:
        break
带有多个except的try结构
try:
    x=input('请输入被除数: ')
    y=input('请输入除数: ')
    z=float(x) / float(y)
except ZeroDivisionError:
    print('除数不能为零')
except ValueError:
    print('被除数和除数应为数值类型')
except NameError:
    print('变量不存在')
else:
    print(x, '/', y, '=', z)
  • 将要捕获的异常写在一个元组中,可以使用一个excep语句捕获多个异常;但并不建议这样做
import sys
try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
    f.close()
except (OSError, ValueError,RuntimeError, NameError):
    pass
try except finally结构
  • 在该结构中,finally子句中的内容无论是否发生异常都会执行,常用来做一些清理工作以释放try子句中申请的资源
>>> try:
	    3/0
except:
	    print(3)
finally:
	    print(5)

	
3
5
  • 如果try子句中的异常没有被处理,或者在except子句或else子句中出现了异常,那么这些异常将会在finally子句执行完后再次抛出
>>> try:
    3/0
finally:
    print(5)

5
Traceback (most recent call last):
  File "", line 1, in 
    try:3/0
finally:
	print(5)
ZeroDivisionError: division by zero
断言与上下文管理
  • 断言与上下文管理是两种比较特殊的异常处理方式,在形式上比异常处理结构要简单一些

  • assert expression[, reason]

  • 当判断表达式expression为真时,什么都不做;如果表达式为假,则抛出异常

  • assert语句一般用于开发程序时对特定必须满足的条件进行验证,仅当__debug__为True时有效。当Python脚本以-O选项编译为字节码文件时,assert语

     

    句将被移除以提高运行速度

>>> a = 3
>>> b = 5
>>> assert a==b, 'a must be equal to b'
Traceback (most recent call last):
  File "", line 1, in 
    assert a==b, 'a must be equal to b'
AssertionError: a must be equal to b

>>> try:
    assert a==b, 'a must be equal to b'
except AssertionError as reason:
    print('%s:%s'%(reason.__class__.__name__, reason))

AssertionError:a must be equal to b
  • 使用with自动关闭资源,可以在代码块执行完毕后还原进入该代码块时的现场
  • 不论何种原因跳出with块,不论是否发生异常,总能保证文件被正确关闭,资源被正确释放
  • with语句的语法如下:
with context_expr [as var]:
    with块 

输出文本文件中的所有行

with open("myfile.txt") as f:
    for line in f:
        print(line, end="")
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935010.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号