一、异常处理
什么是异常,什么是异常处理?
异常主要是指程序在运行过程中发生的错误事件,会影响程序的正常执行。
异常并不是一定会发生。一般情况下,当程序运行中遇到异常时将会终止,并在控制台打印出异常出现的堆栈信息。
异常处理是指程序设计时为了避免因异常而导致程序终止而做的一些额外操作。异常处理可以使得在异常出现后,程序仍然可以执行。
1、常见的异常错误
print(a) #变量或函数未定义
10/0 #除数不能为0 ZeroDivisionError
a = eval(input ('a = '))
b = 10/a
print('b= ',b)
open('../Stu_pack/abc.txt')
2、如何处理异常
python中通常可以将发生异常的代码放在try语句中,如果发生异常则通过expect语句来捕获异常并对做一些额外处理。
如果没有发生异常则执行后面的else语句,最后执行finally语句做一些else语句。
Python中还提供raise语句允许用户主动抛出异常,raise关键字后面需要提供一个异常实例或者异常类。
如果传导的是异常类,则会通过调用无参数的构造方法来实例化对象。
如果捕获到了异常,但是暂时不处理,可以直接通过raise关键字后面什么都不用写。
try:
a = float( input('请输入a = '))
b = 10/a
except:
if a ==0:
print('ZeroDivisionError:除数不能为0!')
else:
print('b= ',b)
finally:
c = a+b
print('c= ',c)
try:
a = float( input('请输入a = '))
b = 10/a
except:
if a ==0:
print('ZeroDivisionError:除数不能为0!')
else:
print('b= ',b)
finally:
c = a+b
print('c= ',c)
try:
c = float( input('请输入a = '))
d = 10/c
except:
if c ==0:
print('ZeroDivisionError:除数不能为0!')
else:
print('d= ',d)
finally:
e = c+d
print('e= ',e)
B = [1,2,3,4,5]
try:
a = b[10]
except IndexError: #执行 下面不执行
print('IndexError')
except:
print('Error')
else:
print('0K')
finally:
print('Exit')
# 定义一个函数,验证密码字符串长度是不是为6-12,不符合要求时抛出异常。(设置密码验证)
def check_str(content):
if(len(content)<6 or len(content)>12):
raise ValueError('长度应该在6-12位之间,当前长度为:'+strlen(content))
else:
print('长度符合要求!')
# 调用函数,不捕获异常(发生异常是,打印异常栈堆信息)
ss =input('请输入一个长度为6-12之间的密码字符串')
check_str(ss)
二、函数
1、参数类型可变长度参数是指函数定义时无法确定参数的个数。例如系统中的print函数,不知道用户需要打印多少个对象,此时将需要打印的内容定义为可变长度参数,根据调用者传递的实际参数的长度。python中可变长度参数有两种形式:*参数名和**参数名
(1)*参数名:表示该函数是一个元组类型,可接受多个实参,并将传递的实参依次存放到元组中,主要针对以位置传值的实参
(2)**参数名:表示该函数是一个字典类型,可接受多个实参,并将传递的键值对放到元组中,主要针对以关键字传值的实参。
def fun_1(a,*b):
print('a =',a)
print('b =',b)
fun_1(10,10)
def fun_2(c,*d):
print('c =',c)
print('d =',d)
fun_2(10,g='aa',e=45,f=6)
2、变量作用域
根据变量定义的位置,可将变量分为全局变量和局部变量。
(1)全局变量:定义在函数外面的变量,可以在多个函数中进行访问,但不能执行赋值操作。
如果有赋值语句,相当于创建了一个同名的局部变量。
(2)局部变量:定义在函数内部的变量,只能在它被定义的函数内使用,在函数外面无法访问。
注意:但局部变量和全局变量同名时,在函数内部使用变量,通常都是指局部变量,如果确实需要对全局变量进行修改,需要使用global关键字对变量进行声明,此时操作的就是全局变量。
def fun_3():
print('局部变量a=',a)
a = 10
fun_3()
print('全部变量a=',a)
def fun_4():
a = 8
print('局部变量a=',a)
a = 10
fun_4()
print('全部变量a=',a)
def fun_5():
global a
print('局部变量a=',a)
a = 10
fun_5()
print('全部变量a=',a)
3、特殊函数
匿名函数lambda表达式:没有函数名字临时使用的函数,可以将lambda表达式看成是函数的简写形式。
(1)lambda表达式的语法:
lambda参数列表:表达式
(2)与函数不同:关键字不同:def 、lambda;没有名称;参数列表不需要一对圆括号,只包含一个表达式,不能包含多条语句。
(3)lambda表达式的主体是一个表达式,而不是一个代码块,在表达式中可以调用其他函数,并支持默认值参数和关键字参数,表达式的结果相当于函数的返回值。
x = 10
y = 21
z = 32
x+y+z
def fun_6(x,y,z):
return x+y+z
fun_6(10,21,32)
test = lambda x,y,z:x+y+z
test(10,21,32)
test1 = lambda x = 12, y = 45,z = 34:x**2+y*2+z%3
test1(12,45,34)
三、数据结构
1、元组:是不可变序列,不可修改里面的元素。原组中元素放在一对圆括号‘()’中,并用逗号分隔,元素类型可以不同。注意,当元组中只包含一个元素是元素,后面的逗号不能省略,否则系统会将其看作是其他数据类型。
2、列表:是有序可变序列,列表的所有元素放在一对中括号‘[]’中,并使用逗号隔开,元素的类型可以不同。
3、字符串:由字符组成的一个不可变序列和元素作用类似 也支持索引切片、重复、合并等操作。
4、字典:无序的映射类型,由若干'键(key):值(value)'组成,’键‘和’值‘之间必须用冒号隔开,所有的键值对放在一对大括号{}内,并用逗号分隔开,其中‘键’必须为不可变类型,在同一个字典中,‘键’必须是唯一的,但‘值’可以重复。
5、集合:是无序可编、不重复的 不支持索引、切片等操作。元素放在一对大括号并用逗号分隔元素类型。可以不同,但集合中元素不能重复,集合中不能包含可变元素例如列表,注意不能直接通过 ‘a ={}’创建空集合此时创建的是一个空字典 可通过循环便利集合中的所有元素。