实习日记 2020-01-14

解决完自己的异常,那今天就研究研究Python的异常吧

内容包含:异常、模块和包、文件、文本文件的编码模式(Py2.x,Py3.x)、eval 函数


异常本身是昨天要去写的一篇日记,但是昨天早晨吃了一碗面,别的不说,自己先“异常”了。就是这货↓

好了言归正传,开始今天的实习日记。


异常

程序执行时遇到错误,停止程序的执行,并且提示一些错误信息。

抛出异常
把当前程序停止下来,并且提示错误信息的动作,叫做抛出异常

判断是否是数字

判断奇偶性

捕获异常

因为在软件开发时,很难预判到所有错误类型,所以一般在捕获异常的末尾,建议增加一个未知异常的捕获:

异常捕获的完整语法

当函数或方法出现异常时,就会把异常传递给调用的一方,这个过程叫做异常的传递。
如果传递到主程序,异常还没有被处理,程序才会终止。

主动抛出异常


模块和包

模块

每一个以.py结尾的python源文件,就是一个独立的模块,模块名同时也是标识符,要遵循标识符的命名规则(数字/字母/下划线组成,不能以数字开头)
模块导入的时候可以设置别名,但别名需要遵循驼峰名法。

import 导入方式

示例:

from…import 导入方式

如果只希望从某个模块中导入某个工具包,这时候需要使用from…inport的导入方式
这种导入方式有别于前面的import导入:前者是导入这个模块中所有的工具,需要使用模块.别名来访问;后者是单独导入工具包,不需要使用模块.别名来访问。

如果导入了两个同名的模块,那么先导入的模块会被后面导入的模块覆盖,这时,需要设置别名
不推荐使用 from…import * 导入工具包出现重名时不方便排查。

__name__属性

Python开发的时候有一个原则——每一个文件都应该是可以被导入的,但是没有添加缩进的文件会被直接执行,这是可以使用__name__函数来防止代码被直接执行。

__name__ 属性可以做到,测试模块的代码 只在测试情况下被运行,而在 被导入时不会被执行!
__name__ 是 Python 的一个内置属性,记录着一个 字符串
如果 是被其他文件导入的,__name__ 就是 模块名
如果 是当前执行的程序 __name__ 是 __main__


包是一个包含多种模块的特殊目录,目录下有一个__init__.py文件。使用 import 包名 可以一次性导入所有模块


发布模块

创建一个setup.py文件

构建模块

成发布压缩包


文件

open、read、write、close

read方法——读取文件(区分大小写)
如果文件存在返回文件操作对象
如果文件不存在,会抛出异常
默认情况下,会一次性把文件读入返回文件的所有内容

close方法负责关闭文件,如果忘记关闭文件,会造成系统资源的消耗,并且会影响后续对该资源的操作

为了防止忘记关闭文件,一般操作文件的时候,打开和关闭要成对先写,然后再去写关于文件的操作代码。

read方法打开文件时,默认以只读方式打开。需要写入文件,需要在读取的时候传递参数。

访问方式

频繁移动指针会影响文件的读写效率,日常使用只读/只写/追加更为常用。

readline方法:按行读取的话,可以降低读取的时候资源消耗

复制小文件

逐行复制小文件


文本文件的编码模式

ASCII编码
8个0/1排列组合,一共2^8组合方式,共256个。每个占1字节内存。

UNICODE编码
UTF-8 1~6字节表示一个UTF-8字符,涵盖了地球上几乎所有地区的文字

Python 2.x 默认使用ASCII编码
Python 3.x 默认使用UTF-8编码

Python 2.x 中使用中文
在解释器第一行,写下编码注释

也可以:(官方建议第一种方法

在 Python 2.x 中,即使指定了文件使用 UTF-8 的编码格式,但是在遍历字符串时,仍然会以字节为单位遍历字符串
要能够 正确的遍历字符串,在定义字符串时,需要 在字符串的引号前,增加一个小写字母 u,告诉解释器这是一个 unicode 字符串(使用 UTF-8 编码格式的字符串)


eval 函数

eval函数将字符串当成有效的表达式求值返回计算结果

案例:计算器

注意:
在开发时千万不要使用 eval 直接转换 input 的结果,会产生安全风险

相当于:

执行成功,返回 0
执行失败,返回错误信息

 

面向对象告一段落,明天开始新的篇章。


致谢:黑马Python教程

发表评论

电子邮件地址不会被公开。 必填项已用*标注