Python的异常处理和函数

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)

持续更新中

猜你喜欢

转载自blog.csdn.net/qq_42543312/article/details/80917328