7

错误和异常

错误:

1.语法错误(syntax error)

2.逻辑语法(logic error)

3.执行期间错误(runtime error)

异常处理

程序一旦发生错误,程序就无法继续运行

为了是程序健壮,可做相关异常处理

try…except…

- try子句
  - try … except 必须放在可能发生异常的程序段周围,而try_statements则是可能发生异常的程序段。
- except子句
  - 用来捕捉指定的异常,一旦捕捉到,就执行与之对应的except_statements,即用来处理异常的程序语句。
  - 如果要针对不同的异常做不同的处理,可以使用多个except子句,其中,exceptionType是欲捕捉的异常类型,省略不写,表示为预设类型:BaseException,所有异常都继承自该类别。
  - [as identifier]可以将捕捉到的异常指向一个变量,然后,通过该变量获得异常相关的信息。
  - 不带任何异常类型使用except,将捕获所有发生的异常。不推荐这么使用,因为我们不能通过该程序识别出具体的异常信息。
- else子句
  - 当try_statements没有异常发生时,会跳过except子句,执行else_statements。
  - 该子句为可选语句,可以指定或者省略。
- finally子句
  - 当要离开try … except 时(无论异常是否发生),就会执行finally_statements,可以使清除错误或者收尾的语句。可给可忽略。

函数

程序而言:函数就是对程序逻辑进行结构化或者过程化的一种编程方法。

built-in function内置函数 ---->BIF

函数的定义

声明函数的一般形式:

def function_name(arg1, arg2, ... ,argn):
    '''statements'''
    func_statements
    return Value

函数的调用

函数的文档说明

函数参数

  • 不传参函数
  • 参数函数
    • 顺序

函数返回值

函数参数种类

形参和实参

  • 形参
    • 只有在调用时才分配内存单元。调用结束后,即释放所有分配的存储单元。因此,形参只在函数内部有效,函数调用结束返回主调用函数后则不能再使用该形参变量。
  • 实参
    • 实参是一个确定的值,能够传递给形参。
      • 作为未知参数或者关键字参数传递。

默认值参数

def usr_manage(name,age,job,hobby):
    print('用户管理系统'.center(16,'-'))
    print('\tName\t',name)
    print('\tAge\t', age)
    print('\tJob\t', job)
    print('\thobby\t', hobby)
    print('用户管理系统'.center(16, '-'))


usr_manage('Tom',20,'IT','Coding')
usr_manage('Jack',20,'IT','reading')

-----用户管理系统-----
Name Tom
Age 20
Job IT
hobby Coding
-----用户管理系统-----
-----用户管理系统-----
Name Jack
Age 20
Job IT
hobby reading
-----用户管理系统-----

关键字参数

def usr_manage(name,age,job='it',hobby='trip'):
    print('用户管理系统'.center(16,'-'))
    print('\tName:\t',name)
    print('\tAge:\t', age)
    print('\tJob:\t', job)
    print('\thobby:\t', hobby)
    print('用户管理系统'.center(16, '-'))


usr_manage('Tom',20,'IT','Coding')
usr_manage('Jack',20,'IT','reading')

-----用户管理系统-----
Name: Tom
Age: 20
Job: IT
hobby: Coding
-----用户管理系统-----
-----用户管理系统-----
Name: Jack
Age: 20
Job: IT
hobby: reading
-----用户管理系统-----

默认值参数,关键字参数,必须放置于位置参数之后。

不定参数

在Python中不定参数主要是指*args **kwargs两个魔法变量值。

它们俩主要是用于函数定义,我们可以将不定数量的参数传递给一个函数。

  • *args*用来接收任意非键值对的任意数量的参数列表函数。
def uncertain_para(para, para2, *args):
    print('普通位置参数:',para, para2)
    print('不定参数:',args)
    print(type(args))

uncertain_para(1,2,3,4,'a','b')
uncertain_para([1,2,3],'ab','cd','ef')

普通位置参数: 1 2
不定参数: (3, 4, ‘a’, ‘b’)
<class ‘tuple’>
普通位置参数: [1, 2, 3] ab
不定参数: (‘cd’, ‘ef’)
<class ‘tuple’>

def a(*args):#元组
    sum1 = 0
    for i in args:
        sum1 += i
    y = sum1/len(args)
    return y

print(a(1,2,3,4))

2.5

def un_para_key(**kwargs):#字典
    print(kwargs)
    print(type(kwargs))
un_para_key(a=1,b=2,c=3,d='b')

{‘a’: 1, ‘b’: 2, ‘c’: 3, ‘d’: ‘b’}
<class ‘dict’>

ex:写一个函数,计算传入字符中的数字,字母,空格及其他字符的个数。

import string


def count_1(a):
    count_d = 0
    count_c = 0
    count_s = 0
    count_e = 0
    for i in a:
        if i in string.digits:
            count_d += 1
        elif i in string.ascii_letters:
            count_c += 1
        elif i == ' ':
            count_s += 1
        else:
            count_e += 1
    print('其他字符:'+ str(count_e))
    print('数字字符:'+str(count_d))
    print('空格字符:'+str(count_s))
    print('字母字符:'+str(count_c))
a = input('请输入一串字符:')
count_1(a)

请输入一串字符:abc123 ‘’’
其他字符:3
数字字符:3
空格字符:3
字母字符:3

函数属性

函数属性是Python中另外一个使用了句点属性标识并拥有名字空间的领域。

def foo()
	'foo() --- Properly created doc string.'
def bar()
	pass
bar._doc_ = 'Oops, forget the doc str above'
bar.version = 0.1

内嵌函数

---->作用域

bar()整个函数都处于外部foo()函数的作用域里(foo()是我们可以从外部访问的一个对象区域)。出了在foo()内部,其他地方是无法对我们的bar()函数进行调用的。

变量作用域

作用域的产生

就作用域而言,Python和C有很大的差别,只有当变量在module,Class,函数中定义的时候,才会有作用域的概念。

def foo():
    a = 'foo'
    print(a)
foo()
print(a)

在作用域中定义的变量,一般只在作用域内有效,需要主要的是

,在if-elif-else, for-else,while-else,try-except(else-finally)等关键字的语句块中不会产生作用域。

作用域的类型

Python中,使用一个变量时并不要求需要预先声明它,但在真正使用的时候,它必须绑定到某个内存对象(被定义赋值)。这种变量名的绑定将在当前作用域引入新的变量,同时,屏蔽外层作用域中的同名变量。

  • 局部作用域(local —L)

  • 嵌套作用域(enclosing ---- E)

    • E 也包含在def关键字中,E和L是相对的,E相对于跟上层的函数而言也是L。与L的区别在于,对一个函数而言,L是定义在此函数内部的局部作用域。
    • 主要为了实现Python的闭包,而增加的实现。
  • 全局作用域(Global — G)

    即在模块层次中定义的变量。模块顶层申明的变量具有全局作用域。从外部来看,模块的全局变量就是一个模块对象的属性。

  • 内置作用域( built — B)

    • 系统固定模块中定义的变量。

搜索变量名的优先级:局部作用域>嵌套作用域>全局作用域>内置作用域。

全局变量和局部变量

gbl_str = 'foo'
def foo():
    loc_str = 'bar'
    return gbl_str + loc_str
print(foo())
print(gbl_str)
print(loc_str)# 局部变量,会报错
a = 6688
def foo():
    print('foo(),a:\t', a)
    a = 666 # 会报错
    print('foo(),a:\t', a)

def bar():
    print('bar(),a:\t', a)

foo()
bar()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值