您的位置:首页 > 编程语言 > Python开发

Python的异常处理和函数

2018-07-04 21:18 239 查看

Python异常处理

什么是异常?

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。

当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

异常处理

将有可能引起错误的代码放进try里面,如果出现错误,代码会根据错误类型进入到指定的except;

这样做的好处:

代码不会因为错误而中断执行。

dic = {}
list = [1, 2, 3, 4, 5, 6, 7, 8]
dic['name'] = '张三'
try :
print(list[14])
print(dic['age'])
except IndexError as e:
print('捕获了一个索引错误{}'.format(e))
except KeyError as e :
print('捕获了一个关键字错误{}'.format(e))
print('hello world')
list = [1, 2, 3, 4, 5, 6, 7, 8]
try :
print(list[21])
# Exception 和 IndexError , KeyError ...
# 为父与子关系
except Exception as e:
print('捕获了一个错误{}'.format(e))
上面的代码都是异常处理的简写,它的标准格式为:
try :
pass
except :
pass
else:
pass
finally:
pass
异常处理的标准格式实例:
dic = {}
try:
print('这是一个标准格式')
print(dic['data'])
except IndexError as e:
print('上一行代码出现了索引错误{}'.format(e))
except KeyError as e:
print('上一行代码出现了关键字错误{}'.format(e))
# 如果没有出现任何错误 即执行else代码块
else :
print('目前代码感觉良好')
#一定会执行的代码块
finally:
print('代码结束')
我们也可以自己指定一个异常。
age = input('请输入你的年龄')
age = int(age)
if age < 0 :
print('年龄不对')
# raise  升起;  在此指抛出错误
# 手动抛出异常
raise Exception('年龄不对,请务必输入一个大于0的数值')

函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

# def  define  定义
# def  + 方法名字 + (参数(形参))
def mySelf():
print('今天是2018年7月4日,'
'我在公司上班的第一天,'
'......省略一万字,'
'感觉自己萌萌哒,')
print('今天是2018年7月5日,'
'今天领导批评了我,'
'感觉很不爽,'
'要辞职')
print('今天是2018年7月6日,已辞职')
#输出函数
mySelf()
函数是有参数值和返回值的。

参数的实质就是变量;

声明方法时候的参数叫做形式参数,简称形参(形参即为变量);

调用方法时候的参数叫做实际参数,简称实参(实参即为给变量赋值);

声明方法的时候如果有参数,那么调用方法一定也要有参数。

无参数无返回值的函数实例

def fun1():
print('hello world')
fun1()
有参数无返回值的函数实例
def fun1(name):
print('大家好,我的名字是{}'.format(name))
fun1('渣渣辉')
没有参数有返回值的函数实例

在这里我们要注意的是:在方法内部声明的变量全部是局部变量;

局部变量的作用范围是在声明变量的这个方法里面;

出了这个方法的范围,就不能再使用这个变量。

def fun1():
result = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
# 将这个值拿到方法的外面使用
return  result
print('1+9的结果是{}'.format(fun1()))
有参数有返回值的函数实例:
def fun1(name,age):
result = '我的姓名是{},我的年龄是{}'.format(name,age)
return result
print(fun1('张三',17))
全局变量:
name = '张三'
def fun1():
# global 全球的;全局的
global name
print(name)
name = '李四'
print(name)
fun1()
函数的默认参数:

想让哪个参数成为默认参数都可以,但是一定要注意:默认参数放入参数列表的队尾。

def fun1(name,age=17,fond = '玩游戏'):
print('我是{},我的年龄是{},我的爱好是{}'.format(name,age,fond))
fun1('小明',18)
fun1('小明')
函数的关键参数:
调用函数的时候直接指明给某个参数赋值,这个参数就叫做关键参数。

如果参数中有参数为非默认参数,那么调用方法的时候一定要给它赋值。

def fun1(name,age = 17 ,sex = '男',fond = '玩游戏'):
print('我是{},我今年{},我是{}的,我喜欢{}'.format(name,age,sex,fond))
fun1('小兰',16,'女')
fun1('小张',fond='吃')
fun1(fond='学习',age=7,name='小王')
args用法
# 将多余的参数统统放入args里面
def fun1(a,b,*args):
print('a的值是:{}'.format(a))
print('b的值是:{}'.format(b))
print('args的值是:{}'.format(args))
# 输出args的第一个元素
# print('args的值是:{}'.format(args[0]))
print('{}+{}={}'.format(a,b,a+b))
fun1(10,15)
fun1(10,15,20)
fun1(10,15,20,25)
fun1(10,15,20,25,30)
返回值return
return有两个作用。

作用一:

将方法内部的结果让外面来使用

def jing():
jing_shui = '我是井水,我只能在fun1这个方法里面用,外面用不到'
#将井水运送出井
return jing_shui
print(jing())
作用二:

截断:return后面的代码 统统不执行。

def fun1():
print('今天走了一步')
print('今天走了两步')
return
print('今天走了三步')
fun1()
join

join()方法用于对序列中的元素进行加工。

space = '---'
word = 'hello world'
print(space.join(word))
def fun1(*args , sep = '~'):
pstr = sep.join(args)
print(pstr)
sep
def fun1(*args , sep = '~'):
pstr = sep.join(args)
print(pstr)
print('a','b','c',sep='~~~')
fun1('a','b','c',sep='!')
map

map 接收两个参数: 参数1 是函数; 参数2是序列;
map函数的意义就是讲序列里面的每一个值都在前面的函数中进行处理,并返回一个新的列表

def my_map(string):
allNumberList = {
'0':0,
'1':1,
'2':2,
'3':3,
'4':4,
'5':5
}
return allNumberList[string]
result = list(map(my_map,'54321'))
print(result)
指针*,**arge
def fun1(*args):
print(args)
# 将元组里面的每一个元素转化成字符串放入list里面
# 为什么将元组转化成列表?
# 元组不可变 ,列表可变
args = list(map(str,args))
print(args)
fun1(1,2,3)
def fun1(a,b=10,*args,**kwargs):
print('a的值是{}'.format(a))
print('args的值是{}'.format(args))
print('kwargs的值是{}'.format(kwargs))
fun1('你好')
fun1('nice','to','meet','you')
# name 和 age 不是关键参数
fun1('hello',name = '张三',age = 18)
fun1(10,None,[{'name':'张三'}])
reduce
reduce()函数接收的参数和map()一样;
参数1:函数 ; 参数2:序列;
不同的是reduce()对序列里面的每一个元素反复调用函数 并返回一个最终结果。
from functools import  reduce
def my_reduse(x,y):
return  x + y
print(reduce(my_reduse,[1,2,3,4,5,6,7,8,9,10]))
eval

eval()将括号里面的内容当成代码来执行。

result = '12 / 3 * 4'
content = eval(result)

匿名函数

lambda  匿名函数  后面只能写比较简单的逻辑;

与列表推导式比较类似。

result = lambda  x , y : x + y
print(result(5,6))
list1 = [1,11,56,24,89,67,43]
list1 = sorted(list1,key = lambda  x : x)
print(list1)
list2 = [{
'name':'张三',
'age':16,
},{
'name':'李四',
'age':17,
},{
'name':'王五',
'age':13,
}
]
list2 = sorted(list2,key = lambda x:x['age'],reverse = True)
print(list2)
持续更新中

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: