Python8 异常处理结构与程序调试
全国计算机等级考试二级Python真题及解析(8)图文程序填空阅读填空程序试题
全国计算机等级考试二级Python真题及解析(8)图文程序填空阅读填空程序试
题
一、程序填空
1.完善程序实现以下功能并保存。
输出数组的最大值。
arr1 =[12, 435, 76, 24, 78, 54, 866, 43]
________ = -32768
for i in range(0,7):
if arr1[i] > max1 : max1 = ________
print("最大值是:", ________)
input("运行完毕,请按回车键退出...")
2.阅读程序。分析有关多项式的代码并回答问题。
求1!+2!+3!+……+20!的和。
n=0
s=0
t=1
for n in range(1,21):
t*=n
s+=t
print(s)
(1)n的作用是________________。
(2)s的作用是 ______________。
(3)t的初值必须赋值为1,这是因为_________。
(4)t*=n的等价语句是 __________
(5)s+=t的等价语句是 ______。
3.调试程序。请阅读以下程序并写出运行结果。
fruites=['banana','apple','mango']
for fruit in fruites:
print(fruit)
a=len(fruites)
print('a=',a)
_________________
4.以下是计算s = 1+6+11+...+ 101的程序代码,请补全程序。
s=0
for i in range(1,102, ):
s=
print( s)
青少年软件编程(Python)等级考试试卷(三级)2021年3月
2021.03青少年软件编程(Python)等级考试试
卷(三级)
分数:100.00 题数:38
一、单选题(共25题,每题2分,共50分)
1. 下列代码的输出结果是?()
x = 0x10
print(x)
A、2
B、8
C、10
D、16
试题编号:20210204-jinwanlian-03
题型:单选题
答案:D
难度:一般
试题解析:0x10的结果为16,故选D
2. 关于语句f=open('d:/a.txt', 'r'),下列描述不正确的是?()
A、f是变量
B、'r'以只读方式打开文件
C、如果文件a.txt不存在,不会报错
D、‘d:/a.txt’是文件路径,代表d盘中一个名为‘a.txt’的文件
试题编号:20210204-jinwanlian-09
题型:单选题
答案:C
难度:较难
试题解析:文件打开方式错误:r只读,不创建文件,如果文件a.txt不存在,会报错。
3. 表达式 all([1,True,True])的结果是?()
A、1
B、False
C、出错
D、True
试题编号:20210204-jinwanlian-19
题型:单选题
答案:D
难度:一般
试题解析:all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 True,如果是返回 True,否则返回 False。元素除了是 0、空、False外都算 True。
4. Python中表示合法的二进制整数是?()
A、0bC3F
B、0B1010
C、0B1019
D、0b1708
试题编号:20210204-jinwanlian-01
题型:单选题
python try except 用法
python try except 用法
在Python中,异常处理是一种重要的编程技术,可以帮助程序在面临错误时优雅地处理异常情况,防止程序崩溃。try和except是Python 中用于捕捉和处理异常的关键字。以下是关于try-except的详细用法和一些最佳实践。
1. 基本语法
try:
# 可能引发异常的代码块
# ...
except ExceptionType as e:
# 处理异常的代码块
# ...
else:
# 如果没有异常发生时执行的代码块
# ...
finally:
# 无论是否发生异常都会执行的代码块
# ...
2. 捕获单一异常
try:
result =10/0
except ZeroDivisionError as e:
print(f"发生除零错误: {e}")
3. 捕获多个异常
try:
num =int(input("输入一个数字: "))
result =10/num
except(ValueError, ZeroDivisionError) as e: print(f"发生错误: {e}")
4. 捕获所有异常
try:
# 一些可能引发异常的代码
# ...
except Exception as e:
print(f"发生异常: {e}")
5. 使用else子句
try:
# 可能引发异常的代码块
# ...
except ExceptionType as e:
# 处理异常的代码块
# ...
else:
# 如果没有异常发生时执行的代码块
# ...
6. 使用finally子句
try:
# 可能引发异常的代码块
python题目及答案
python题目及答案
题目:Python基础知识和应用题目及答案
1.什么是Python?简要介绍Python的特点和用途。
答:Python是一种高级程序设计语言,由Guido van Rossum于1989年发明而成。Python具有简洁、易读易写的语法,强大的标准库和丰富的第三方库,使其成为一种被广泛应用的程序设计语言。Python主要用于开发Web应用、数据分析、人工智能、科学计算等领域。
2. Python中如何定义变量?请给出一个简单的例子。
答:在Python中,可以通过赋值语句来定义变量。例如:
```python
x = 10
name = 'Alice'
```
在上面的例子中,我们分别定义了一个整数类型的变量x和一个字符串类型的变量name。
3.请解释Python中的缩进和代码块的概念。这在Python中有什么作用?
答:在Python中,缩进是一种代码的格式化方式,用来表示代码块之间的层次结构。通常情况下,一个代码块由一组语句组成,这些语句具有相同的缩进量。缩进的作用是使代码更易读并且在一定程度上规范了代码的格式。
4.请写一个简单的Python函数,实现计算两个数的和。
答:下面是一个计算两个数的和的简单函数:
```python
def add(x, y):
return x + y
result = add(3, 4)
print(result) #输出结果为7
```
在上面的例子中,我们定义了一个名为add的函数,接受两个参数x和y,并返回它们的和。然后我们调用这个函数,并打印出结果。
全国计算机等级考试二级Python真题及解析(8)
全国计算机等级考试二级Python真题及解析(8)
一、选择题
1.以下对 Python 程序缩进格式描述错误的选项是()
A.不需要缩进的代码顶行写,前面不能留空白
B.缩进可以用 tab 键实现,也可以用多个空格实现
C.严格的缩进可以约束程序结构,可以多层缩进
D.缩进是用来格式美化 Python 程序的
2.下列Python程序段运行的结果是()
x=0
for i in range(1,20,3):
x=x+i
print(x)
A.80 B.190 C.70 D.210
3.关于下列Python程序段的说法正确的是()
k=1
while 1:
k+=1
A.存在语法错误,不能执行B.执行1次C.执行无限次
D.执行k次
4.下列Python程序段运行的结果是()。
i=0
sum=0
while i<10:
if i%2==0:
sum+=i
i+=2
print("sum=",sum)
A.sum=17 B.sum=18 C.sum=19 D.sum=20
5.在VB中,下列与表达式Len("python")+20的值相等的是()
A.Int(Rnd * 26)+1 B.Val("20")+16 mod 9
C.Mid("Hello2019",6,2)+"6" D.a bs(Sqr(16)– 30)
6.队列在Python中,用()实现队列的创建,队列的基本操作:()()()()线性数据结构又称线性表。
A.随机;入队;出队;求队长;判队空B.列表;入队;出队;求队长;判队空C.列表;随机;出队;求队长;判队空D.入队;随机;列表;求队长;判队空7.运行下列 Python程序,结果正确是()
Python8.1~8.3
8.2 案例目标及实现思路
随着我国证券市场的不断壮大,目前在上海证券交易所和深圳证券交易所上市交易的公司已经达到3700多家,证券及证券投资在社会经济生活中的地位也越来 越重要。在庞大的上市公司数量及其数据面前,传统的基本面分析方法具有很大的局限性。因此,基于数量化的分析方法,采用计算机技术及数据挖掘模型,帮助 我们快速的挖掘并分析数据,从而找到我们需要的信息,这种技能已经成为投资界所必须的技能。本案例正是基于这样的背景出发,选择上市公司财务报表及财务 指标数据,利用主成分分析方法,对上市公司进行综合评价,为投资者提供一定的参考价值。
p1=dtt.iloc[0,3]
p2=dtt.iloc[len(dtt)-1,3]
#计算排名第i个股票代码的收益率,并添加到r_list中
r_list.append((p2-p1)/p1)
r_total=sum(r_list) #计算总收益率
Part 8 8.3.6 量化投资策略设计与分析
前面8.3.1~8.3.5作为一个例子,以2016年度的财务报表及财务指标数据为基础对上市公司进行了综合评价,并取排名前30的股票构建投资组合,同时以持有期为201705-01~12-31计算投资组合收益率。该例子详细介绍了如何选取指标、数据预处理、主成分分析及排名、投资组合收益率计算等相关方法及程序实现。本节主要是对该例 子做一个总结提炼及推广,即抽象为函数的形式。通过定义综合排名函数和收益率计算函数,可以获得不同年份、不同持有期的股票综合排名及投资组合收益率,并最终 通过调用这两个函数实现量化投资策略设计与实现。下面将给以详细介绍。
python中文参考手册
python中文参考手册
【原创版】
目录
1.Python 简介
2.Python 版本
3.Python 基础语法
4.Python 数据类型
5.Python 控制流程
6.Python 函数和模块
7.Python 面向对象编程
8.Python 异常处理
9.Python 标准库
10.Python 应用实例
正文
1.Python 简介
Python 是一种高级编程语言,其设计目标是易于阅读和编写。Python 具有清晰的语法和优秀的可扩展性,可以用于多种应用,包括 Web 开发、数据分析、人工智能和科学计算等领域。Python 的首个公开发布版本——Python 0.9.0,发布于 1991 年。
2.Python 版本
Python 的最新稳定版本是 Python 3.9。Python 3 系列与 Python 2 系列相比有许多改进和新特性,因此建议使用 Python 3 进行开发。Python 版本可以通过`python --version`或`python3 --version`命令进行查询。
3.Python 基础语法
Python 的基础语法包括变量、常量、运算符、注释等。Python 中的变量不需要声明类型,它是一种动态类型的语言。Python 使用缩进来表
示代码块,例如:`if x > 10:`。
4.Python 数据类型
Python 的数据类型包括数字、字符串、列表、元组、字典和集合等。这些数据类型具有不同的特点和使用方法。例如,列表是一种有序、可变的集合,可以使用`[]`来创建。
8+Python程序设计+异常处理结构与程序调试
• 例外产生之后,需要有相应的处理。如果没有相应的except处理块,代码的 执行顺序会发生改变,直到找到相应的except处理块或者程序退出为止。
def divide(x, y): try: result = x / y except ZeroDivisionError: print("division by zero!") else: print("result is", result) finally:
Try again... Try again... Try again...
try.......except :示例2
>>> try:
raise Exception('spam', 'eggs')
except Exception as inst:
print(type(inst)) # the exception instance
except ZeroDivisionError: print('除数不能为零')
except TypeError: print('被除数和除数应为数值类型')
except NameError: print('变量不存在')
else: print(x, '/', y, '=', z)
python必背知识点总结
python必背知识点总结
1. Python基础语法
Python使用缩进来表示代码块,因此缩进是非常重要的。通常情况下,使用四个空格来表示一个缩进级别。
Python的注释使用#符号,可以单独在一行中使用,也可以紧跟在语句后面。
Python中的变量是动态类型的,可以在运行时改变其类型。变量名区分大小写。
2. 数据类型
Python有多种数据类型,包括整型(int)、浮点型(float)、字符串(str)、布尔型(bool)、列表(list)、元组(tuple)、集合(set)和字典(dict)等。
数据类型之间可以相互转换,例如str()函数可以将其他数据类型转换为字符串类型。
Python中的变量是没有固定类型的,可以随时改变其类型。
3. 运算符
Python支持各种运算符,包括算术运算符、比较运算符、逻辑运算符、位运算符等。
Python中的逻辑运算符包括and、or、not,分别代表与、或、非。
4. 控制流结构
Python中的控制流结构包括if语句、for循环、while循环等。
if语句用于条件判断,else语句用于处理不满足条件的情况,elif语句用于处理多个条件的情况。
for循环可以遍历列表、元组、字符串等序列类型的数据,也可以和range()函数一起使用。
5. 函数
在Python中,函数使用def关键字定义,可以接受任意数量的参数。
函数可以有默认参数值,也可以返回多个值。
函数可以递归调用,也可以作为参数传递给其他函数。
6. 模块和包
Python中的模块是一个包含Python代码的文件,可以包含函数、变量、类等。使用import语句可以导入模块。
python交互模式的代码
python交互模式的代码
Python交互模式是一种方便快捷的编程环境,可以在命令行中直接输入和执行Python代码,实时获取结果。本文将介绍一些常见的Python交互模式的代码示例及其功能。
1. 打印字符串
在Python交互模式中,可以使用print函数打印字符串。以下是一个简单的示例:
```
print("Hello, World!")
```
运行这段代码后,屏幕上将输出"Hello, World!"。
2. 基本运算
Python交互模式也可以进行基本的数学运算。以下是一个示例:
```
a = 5
b = 3
print(a + b)
```
运行这段代码后,屏幕上将输出8,即5加3的结果。
3. 条件语句
Python交互模式中可以使用条件语句来进行逻辑判断。以下是一个
示例:
```
age = 18
if age >= 18:
print("成年人")
else:
print("未成年人")
```
运行这段代码后,如果age大于等于18,屏幕上将输出"成年人",否则输出"未成年人"。
4. 循环语句
Python交互模式中可以使用循环语句来重复执行一段代码。以下是一个示例:
```
for i in range(5):
print(i)
```
运行这段代码后,屏幕上将输出0到4,每个数字占一行。
5. 定义函数
Python交互模式中可以定义函数,用于封装一段可重复使用的代码。以下是一个示例:
def square(x):
return x * x
print(square(5))
```
运行这段代码后,屏幕上将输出25,即5的平方。
python程序设计的8个实验内容
一、概述
Python是一种直观、易学、功能强大的计算机编程语言,广泛应用于Web开发、数据分析、人工智能等领域。本文将介绍Python程序设计的8个实验内容,帮助读者深入了解和掌握Python编程技能。
二、实验一:基础语法
1. 学习Python的基本语法,包括变量、数据类型、运算符等。
2. 编写一个简单的Python程序,实现对用户输入的数字进行排序并输出结果。
三、实验二:条件控制和循环
1. 掌握Python的条件控制语句,如if-else和switch-case。
2. 熟练运用循环结构,包括for循环和while循环。
3. 编写一个Python程序,实现对用户输入的数字进行判断,输出是否为素数。
四、实验三:函数
1. 学习Python函数的定义和调用。
2. 掌握参数传递和返回值的用法。
3. 编写一个Python程序,实现计算两个数的最大公约数和最小公倍数的函数,并进行调用测试。
五、实验四:列表和元组
1. 了解Python中列表和元组的概念和用法。
2. 编写一个Python程序,实现对列表和元组的增删改查操作,并输出结果。
六、实验五:字典和集合
1. 掌握Python中字典和集合的特点和用法。
2. 编写一个Python程序,实现对字典和集合的遍历和操作,并输出结果。
七、实验六:文件操作
1. 学习Python文件的打开、读取和写入操作。
2. 编写一个Python程序,从文件中读取数据并进行处理,然后将结果写入新文件。
八、实验七:异常处理
1. 理解Python中异常的概念和分类。
2. 编写一个Python程序,模拟发生异常并进行处理,保证程序正常运行。
《Python程序设计基础》习题答案与分析
Python程序设计基础习题答案与分析
程昱
第1章基础知识
1.1 简单说明如何选择正确的P ytho n版本。
答:
在选择Pyt hon的时候,一定要先考虑清楚自己学习Pyth on的目的是什么,打算做哪方面的开发,有哪些扩展库可用,这些扩展库最高支持哪个版本的Py thon,是Pytho n 2.x还是Pyt hon 3.x,最高支持到P y thon 2.7.6还是Pyt hon 2.7.9。这些问题都确定以后,再做出自己的选择,这样才能事半功倍,而不至于把大量时间浪费在Pyth on的反复安装和卸载上。同时还应该注意,当更新的Py thon版本推出之后,不要急于更新,而是应该等确定自己所必须使用的扩展库也推出了较新版本之后再进行更新。
尽管如此,Python 3毕竟是大势所趋,如果您暂时还没想到要做什么行业领域的应用开发,或者仅仅是为了尝试一种新的、好玩的语言,那么请毫不犹豫地选择P y thon 3.x系列的最高版本(目前是Pyt hon 3.4.3)。
1.2 为什么说Py thon采用的是基于值的内存管理模式?
Python采用的是基于值的内存管理方式,如果为不同变量赋值相同值,则在内存中只有一份该值,多个变量指向同一块内存地址,例如下面的代码。
>>> x = 3
>>> id(x)
10417624
>>> y = 3
全国计算机等级考试二级Python真题及解析(8)图文word
全国计算机等级考试二级Python真题及解析(8)图文word
一、选择题
1.python单行注释和多行注释分别是什么?()
A.""" """和''' ''' B.#和""" """ C.//和''' ''' D.#和// 2.如下Python程序段
x = 2
print (x+1)
print (x+2)
运行后,变量x的值是()
A.2 B.3 C.5 D.
3.在Python中自定义函数需要什么关键字放在函数开始()
A.function B.def C.define D.void 4.下面代码执行完毕后, a和b的值分别为()
a=l a=l;
b=2b=2;
a=b a=b;
VB、Python 代码JAVA代码
A.1 和 2 B.1 和 1 C.2 和 2 D.2 和 1 5.利用Python程序绘制x-y的散点图,则下列程序第5行应该填写的代码是( )。
A.plt. plot(X,Y)B.plt. scatter(X,Y)
C.plt. bar(X,Y)D.plt .boxplot(X,Y)
6.要利用Python通过数组绘制拟合曲线图,必须要用到的外部库是()A.time库
B.random库
C.turtle库
D.matplotlib 库
7.在python中,Int()函数的功能是返回不大于x的最大整数,设a=3,b=4,c=5 ,则下列表达式的运算结果中值最大的是()
A.math.sqrt(b) B.abs(a- b)C.Int(2*a-c/b)D.a**2+b**2-c**2 8.以下文本框内是一段用Python程序设计语言编写的源代码,功能是输出200以内能被17整除的最大正整数。这段源代码属于()。
《Python程序设计》习题与答案
《Python程序设计》习题与答案
第1章基础知识
1.1简单说明如何选择正确的Python版本。答:
在选择Python的时候,一定要先考虑清楚自己学习Python的目的是什么,打算做哪方面的开发,有哪些扩展库可用,这些扩展库最高支持哪个版本的Python,是Python2.某还是Python3.某,最高支持到
Python2.7.6还是Python2.7.9。这些问题都确定以后,再做出自己的选择,这样才能事半功倍,而不至于把大量时间浪费在Python的反复安装和卸载上。同时还应该注意,当更新的Python版本推出之后,不要急于更新,而是应该等确定自己所必须使用的扩展库也推出了较新版本之后再进行更新。
尽管如此,Python3毕竟是大势所趋,如果您暂时还没想到要做什么行业领域的应用开发,或者仅仅是为了尝试一种新的、好玩的语言,那么请毫不犹豫地选择Python3.某系列的最高版本(目前是Python3.4.3)。
1.2为什么说Python采用的是基于值的内存管理模式?答:10417624
1.3在Python中导入模块中的对象有哪几种方式?答:常用的有三种方式,分别为import模块名[a别名]
from模块名import对象名[a别名]frommathimport某
1.4使用pip命令安装numpy、cipy模块。答:在命令提示符环境下执行下面的命令:pipintallnumpypipintallcipy
1.5编写程序,用户输入一个三位以上的整数,输出其百位以上的数字。例如用户输入1234,则程序输出12。(提示:使用整除运算。)答:
Python_try异常处理的解决方法
Python_try异常处理的解决⽅法常⽤异常种类
1 AttributeError 试图访问⼀个对象没有的树形,⽐如foo.x,但是foo没有属性x
2 IOError 输⼊/输出异常;基本上是⽆法打开⽂件
3 ImportError ⽆法引⼊模块或包;基本上是路径问题或名称错误
4 IndentationError 语法错误(的⼦类);代码没有正确对齐
5 IndexError 下标索引超出序列边界,⽐如当x只有三个元素,却试图访问x[5]
6 KeyError 试图访问字典⾥不存在的键
7 KeyboardInterrupt Ctrl+C被按下
8 NameError 使⽤⼀个还未被赋予对象的变量
9 SyntaxError Python代码⾮法,代码不能编译
10 TypeError 传⼊对象类型与要求的不符合
11 UnboundLocalError 试图访问⼀个还未被设置的局部变量,基本上是由于另有⼀个同名的全局变量,导致你以为正在访问它
12 ValueError 传⼊⼀个调⽤者不期望的值,即使值的类型是正确的
如需要考虑到try代码块中可能出现的异常,需要先针对定义,最后定义Exception来确保程序正常运⾏。
1 s1 = 'hello'
2try:
3 int(s1)
4except KeyError as e:
5print'键错误'
6except IndexError as e:
7print'索引错误'
8except Exception as e:
9print'错误'
异常其它结构
1try:
2# 主代码块
python-8程序设计、os库、第三方库安装、第三方库介绍
程序设计
自顶向下的设计思维:分而治之。
自底向上的执行思维:模块化集成。
自顶向下是“系统”思维的简化。
程序设计思维(抽象计算过程和自动化执行)
逻辑思维:推理和演绎,数学为代表,A->B B->C A->C。
实证思维:实验和验证,物理为代表,引力波<-实验。
计算思维:设计和构造,计算机为代表,汉诺塔递归。
抽象和自动化(抽象问题的计算过程,利用计算机自动化求解)计算思维是基于计算机的思维方式。基于计算机强大的算力及海量数据。
抽象计算过程,关注设计和构造,而非因果。
编程是将计算思维编程实现的手段。
计算生态关系
没有顶层设计、以功能为单位、具备三个特点(竞争发展、相互依存、迅速更迭)。
创新:跟随创新、集成创新、原始创新。
编程的起点不是算法而是系统。
编程如同搭积木,计算生态为主要模式。
编程的目标是快速解决问题。
编程只是手段,不是目的,程序最终为人类服务。
用户体验
用户体验指用户对产品建立的主观感受和认识。
提高用户体验的方法(进度展示、异常处理等):
进度展示:如果程序需要计算时间,可能产生等待,增加进度条展示。如果程序有若干步骤,需要提示用户,增加进度展示。如果程序可能存在大量次数的循环,增加进度展示。
异常处理:当获得用户输入,对合规性进行检查,需要异常处理。当读写文件时,对结果进行判断,需要异常处理。当进行输入输出时,对运算结果进行判断,需要异常处理。
其他方法:
打印输出:特定位置,输出程序运行的过程信息。
日志文件:对正序异常及用户使用进行定期记录。
帮助信息:给用户多种方式提供帮助信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
优势:能够处理所有的异常
• 建议
• 尽量显式捕捉可能会出现的异常,并编写具有针对性的代码; • 最后一个except用来捕捉BaseException。
try.......except :示例1
>>> while True: try: x = int(input("Please enter a number: ")) break except ValueError: print("That was no valid number. Try again...") Please enter a number: a That was no valid number. Please enter a number: b That was no valid number. Please enter a number: c That was no valid number. Please enter a number: 10 Try again... Try again... Try again...
def except_else_1(): a_list = ['China', 'America', 'England', 'France'] while True: print('请输入字符串的序号') try: n = int(input()) print(a_list[n]) except IndexError: print('列表元素的下标越界,请重新输入字符串的序号') except ValueError: print('输入不是十进制整数,请重新输入字符串的序号') else: break
第8章 异常处理结构与程序调试
异常(exception)
• 简单地说,异常是指程序运行时引发的错误。引发错误的原因有 很多,例如除零、下标越界、文件不存在、网络异常、类型错误、 名字错误、字典键错误、磁盘空间不足,等等。 • 如果这些错误得不到正确的处理将会导致程序终止运行 • 合理地使用异常处理结果可以使得程序更加健壮,具有更强的容 错性,不会因为用户不小心的错误输入或其他运行时原因而造成 程序终止。 • 也可以使用异常处理结构为用户提供更加友好的提示。 • 程序出现异常或错误之后是否能够调试程序并快速定位和解决存 在的问题也是程序员综合水平和能力的重要体现方式之一。
• 分析
• 功能:读取并输出文件的内容。 • 在出现例外的情况下,执行红色的print语句后,结束程序的执行; • 在没有例外的情况下,执行else块的内容。
8.3.3 带有多个except的try结构
try: try_block except Exception1: except_block_1 except Exception2: except_block_2 ... #被监控的语句 #处理异常1的语句 #处理异常2的语句
class MyError(ቤተ መጻሕፍቲ ባይዱxception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) try: raise MyError(2*2) except MyError as e: print('My exception occurred', e) raise
8.3 Python中的异常处理结构
• 第一种方式没有except块
• 执行<body>代码 • 不管有没有异常执行finally块
try: <body> finally: <finallyBody> try: <body> except [expression [as identifier]]: # 至 少一次,在多次出现时不带表达式except应该是最后一个。 按序匹配找到对应的exception为止 <exceptionBody> else: # 可选的,在没有异常出现在前面的异常都没 有出现时执行 <elseBody> finally: # 可选的,不管异常有没有都要执行 <finallyBody>
8.2 Python中的异常类
• 下面列出了常用的异常类
抛出异常raise语句
• 主动抛出异常
• 定义自己的异常类时; • 或者需要抛出异常时。
• raise语法
raise [expression [from expression2]]
• expression:必须是一个异常类,或异常类的实例对象;如果为一个异常 类,则相当于首先创建一个该类的实例,然后抛出该异常对象 • from expression2:给出了将两个异常连接起来的方法,表示异常是由于另 一个expression2引起的。
print('请输入字符串的序号')
n = int(input()) try: print(a_list[n]) except IndexError: print('列表元素的下标越界,请重新输入字符串的序号') else: break
• 分析上述的代码
• 输入错误:例如输入的数值超出了正常的序号,会产生异常;执行红色 print语句,并继续循环; • 但是输入了非数值? • 其他的情况:输出列表中正确的字符串,并且退出循环。
• 功能:
• 根据实际产生的例外,执行其中的例外程序块。
带有多个except的try:示例1
• 典型例子:除法。
try: x=int(input('请输入被除数: ')) y=int(input('请输入除数: ')) z=float(x) / y except ZeroDivisionError: print('除数不能为零') except TypeError: print('被除数和除数应为数值类型') except NameError: print('变量不存在') else: print(x, '/', y, '=', z)
try.......except .......else:示例2
for arg in sys.argv[1:]: try: f = open(arg, 'r') except IOError: print('cannot open', arg) else: print(arg, 'has', len(f.readlines()), 'lines') f.close()
8.1 什么是异常
• 语法错误和逻辑错误不属于异常(运行时错误),但有些语法错误往 往会导致异常,例如由于大小写拼写错误而访问不存在的对象。 • 当Python检测到一个错误时,解释器就会指出当前流已无法继续执行 下去,这时候就出现了异常。异常是指因为程序出错而在正常控制流 以外采取的行为。 • 异常分为两个阶段:第一个阶段是引起异常发生的错误;第二个阶段 是检测并处理阶段。 • 不建议使用异常来代替常规的检查,如if...else判断。 • 应避免过多依赖于异常处理机制。 • 当程序出现错误,python会自动引发异常,也可以通过raise显式地引 发异常。
带有多个except的try :示例2
• 当有多个except块而且处理相同时,可以使用元组的形式处理。
import sys import sys try: try: f = open('sample.txt') f = open('sample.txt') s = f.readline() s = f.readline() i = int(s.strip()) i = int(s.strip()) except OSError as err: except (OSError, ValueError, print("OS error: {0}".format(err)) RuntimeError, NameError): except ValueError: pass print("Could not convert data to an integer.") except: print("Unexpected error:", sys.exc_info()[0]) raise
8.3.1 try.......except结构
• 这是最基本的处理结构; • 具有两种形式。
代码处理形式一 try: try_block #被监控的代码 except Exception1[,reason]: except_block #异常处理代码 代码处理形式二 try: ... except BaseException,e: except_block
expression as instance instance为异常对象
新的scope,但是instance在退出该 block后不可用
8.3.2 try.......except .......else:示例1
a_list = ['China', 'America', 'England', 'France'] while True:
try.......except :示例2 注意:在exception block并不是一个
>>> 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) <class 'Exception'> print(x) ('spam', 'eggs') print(inst) ('spam', 'eggs') x = spam y = eggs spam traceback (most recent call last): UnboundLocalError: local variable 'inst' referenced before assignment
My exception occurred 4 Traceback (most recent call last): File "C:/Users/dlmao/PycharmProjects/pythonClass /exception_demo.py", line 14, in <module> raise MyError(2*2) MyError: 4
• 第二种方式至少有except块,else 和finally可选
• expression应该为
• 异常类 • 或者异常类的元组,表示其中任一 异常出现
8.3 Python中的异常处理结构
• 常见的异常处理结构
• • • • try.......except结构 try.......except .......else结构 带有多个except的try结构 try.......except .......finally结构
try: <body> finally: <finallyBody> try: <body> except [expression [as identifier]]: # 至 少一次,在多次出现时不带表达式except应该是最后一个。 按序匹配找到对应的exception为止 <exceptionBody> else: # 可选的,在没有异常出现在前面的异常都没 有出现时执行 <elseBody> finally: # 可选的,不管异常有没有都要执行 <finallyBody>
raise Exception raise Exception('foo occurred!')
raise Exception('foo occurred!') from Exception('another error occured!')
自定义异常类
• 下面的例子演示了自定义的异常类
• 必须继承Exception类或者其子类:Exception为所有异常类的基类;