ll1123

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1、什么是模块?

  在Python中,一个py文件就是一个模块,文件名为xxx.py模块名则是xxx,导入模块可以引用模块中已经写好的功能。除了自定义模块外,我们还可以导入使用内置模块第三方模块提供的现成功能,这种“拿来主义”极大地提高了程序员的开发效率。--体现了python开发的便捷与强大。

2、怎么使用模块?

  全部导入:import xxx、from xxx import *

  指定导入:import module.xx as yy、from module import xx 

  导入顺序与书写规范:先导入python内置模块,然后是第三方模块,最后是自定义模块,且用空行区分开三种类型的模块导入

  as:通常在被导入的名字过长时采用起别名的方式来精简代码,另外为被导入的名字起别名可以很好地避免与当前名字发生冲突,通过if结构还可以保持调用方式的一致性

  *:模块的编写者可以在自己的文件中定义__all__变量用来控制*代表的意思

  __all__一个列表,元素为规定该模块可以被其他模块导入的变量名,函数名,类名。注意元素必须是字符串。此规定不影响指定导入方式。

  搜索路径设置:当前模块执行sys.path.append(需要导入的模块的路径)或者将文件夹Mark Directory as成source root的方法

  __name__:每个py文件都有一个__name__属性,if __name__ == "main",表示该文件是主程序文件,否则表示该文件只是个模块,作用是被导入使用其功能。

3、什么是包?

  包就是一个含有__init__.py文件的文件夹,文件夹内可以组织子模块或子包。随着模块数目的增多,把所有模块不加区分地放到一起也是极不合理的,于是Python为我们提供了一种把模块组织到一起的方法,即创建一个包。

  包是用来干嘛的呢?package和directory的区别就是多了一个__init__.py文件,包属于模块的一种,因而包以及包内的模块均是用来被导入使用的,而绝非被直接执行。

  __init__.py:文件内容是import xxx和from 本包 import xxx等导入语句和__all__列表。xxx表示本包下的子包和子模块,不写导入语句则本包下xxx不能被导入使用,使用时会抛异常AttributeError。而编写__all__列表的目的则和模块是一样的,用来控制*代表的意思。

4、绝对导入和相对导入?

  编写包内的__init__.py时,建议使用相对导入,如from . import xxx。表示当前文件(__init__.py)所在的文件夹,.. 表示当前包所在的文件夹。

5、什么是异常?

  程序运行一旦出现错误Error,便会产生一个异常,若程序中没有处理它,就会抛出该异常,程序终止运行

  1. 定义:运行时检测到的错误。
  2. 现象:当异常发生时,程序不会再向下执行,而转到异常类的调用语句。
  3. 常见异常类型:
  • NameError:变量未定义。
  • TypeError:不同类型数据进行运算。
  • IndexError:超出索引范围。
  • AttributeError:对象没有对应名称的属性。
  • KeyError:没有对应名称的键。
  • ValueError:值错误,如int('a12')
  • ZeroDivisionError:除数不能为0
  • Exception:异常基类。

6、异常处理?

 

try:
    可能触发异常的语句
except 错误类型1 [as 变量1]:
    处理语句1
except 错误类型2 [as 变量2]:
    处理语句2
except Exception  [as 变量3]:
    不是以上错误类型的处理语句
else:
    未发生异常执行的语句
finally:
    无论是否发生异常都执行的语句
  1. 作用:将程序跳过异常,继续执行。
  2. 说明:
  • as 子句是用于绑定错误对象的变量,可以省略
  • except子句可以有一个或多个,用来捕获某种类型的错误。
  • else子句最多只能有一个。
  • finally子句最多只能有一个,如果没有except子句,必须存在。

7、如何调用异常类?

  raise语句:raise 异常类

  • 作用:抛出一个错误,让程序进入异常状态。
  • 目的:在程序调用层数较深时,向主调函数传递错误信息要层层return 比较麻烦,所以人为抛出异常,可以直接传递错误信息。

8、自定义异常类

#定义:
class 类名Error(Exception):
    def __init__(self,参数):
        super().__init__()
        self.数据 = 参数

#调用:
try:
    …
    raise 自定义异常类名(参数)
except 类名Error as 变量名:
    变量名.数据

#作用:封装错误信息            

 

举例:

class AgeError(Exception):
def __init__(self, message="", code="", id=0):
super(AgeError, self).__init__()
# 消息/错误代码/错误编号....
self.message = message
self.code = code
self.id = id


class Wife:
def __init__(self, age=0):
self.age = age

@property
def age(self):
return self.__age

@age.setter
def age(self, value):
if 20 <= value <= 30:
self.__age = value
else:
# 抛出/发送 错误信息(异常对象)
raise AgeError("我不要", "20 <= value <= 30", 404)
# 需要传递的信息:消息/错误代码/错误编号....


# 接收错误信息
try:
w01 = Wife(32)
print(w01.age)
except AgeError as e:
print(e.id) # 404
print(e.message) # 我不要
print(e.code) # 20 <= value <= 30

  

 

posted on 2020-05-15 23:33  Lennie-L  阅读(122)  评论(0编辑  收藏  举报