Selenium3自动化测试实战--第3章 Python基础2--调用模块和异常
3.6 模组
模组,一般称为类库或模块。分为标准模块和第三方库。
3.6.1 调用模块
import time # 个人感觉这种比较好。
from time import time, sleep # 如果用这种,sleep()常用,就不用前面加time.sleep()。但可能也有其它麻烦。比如help(time)查看time的描述文档,就失败了。
from time import * # 不用每个函数加time,但不推荐这样做
from time import sleep as sys_sleep # 如果导入的函数刚好与自己定义的重复,可以用as对导入函数重命名。
>>> time.time()
1668569663.572735
>>> time.ctime()
'Wed Nov 16 11:39:57 2022'
>>> time.gmtime()
time.struct_time(tm_year=2022, tm_mon=11, tm_mday=16, tm_hour=3, tm_min=42, tm_sec=18, tm_wday=2, tm_yday=320, tm_isdst=0)
>>> time.localtime()
time.struct_time(tm_year=2022, tm_mon=11, tm_mday=16, tm_hour=11, tm_min=42, tm_sec=47, tm_wday=2, tm_yday=320, tm_isdst=0)
>>> time.monotonic()
11255.846
3.6.2 自定义模块--同目录调用
project1
calculator.py
test.py
calculator.py
def add(a,b):
return a+b
test.py
from calculator import add # 导入calculator文件中的add函数
print(add(4,5))
3.6.3 跨目录调用
project2
module
calculator.py
test
test.py
import sys
from os.path import dirname,abspath
project_path = dirname(dirname(abspath(__file__))) # __file__用于获取文件所在的路径, dirname()嵌套使用
sys.path.append(project_path + "\\module")
from calculator import add
print(add(2,3))
3.6.4 编写自测代码
def add(a,b):
return a + b
if __name__ == '__main__': # 表示当模块被直接运行时,下面的代码块将被运行;当模块被其他程序文件调用时,下面模块不被运行
# 自测代码
c = add(3,5)
print(c)
3.7 异常
Python用异常对象来表示异常情况。在遇到错误后,异常对象引发异常。如果异常对象并未被处理或捕捉到,则程序会用回溯(traceback)来终止程序。
3.7.1 认识异常
try except语句来捕捉并处理异常。
try:
open("abc.txt",'r')
except BasException as msg:
print(msg)
官网文档列出来的常见exception
https://docs.python.org/zh-cn/3/library/exceptions.html?highlight=baseexception#BaseException
Exception | 所有内置的非系统退出类异常都派生自此类。所有用户自定义异常也应该派生自此类 |
AssertionError | 当assert语句失败时将被引发 |
FileNotFoundError | 是OSError的子类,将所请求的文件或目录不存在时将被引发 |
AttributeError | 当属性引用或赋值失败时将被引发(当一个对象根本不支持属性引用或赋值时则将引发TypeError) |
OSError | 在一个系统函数返回系统相关的错误时将被引发,例如 文件未找到 或磁盘已满 |
NameError | 当某个局部或全局名称未找到时将被引发 |
IndexError | 当序列抽取超出范围时将被引发(如果指定索引不是整数则TypeError会被引发) |
SyntaxError | 当解析器遇到语法错误时引发。这可以发生在import语句对内置函数的调用,或读取原始脚本或标准输入的时候。 |
KeyboardInterrupt | 当用户按下中断键(通常为control+c 或 delete)将被引发。该异常继承自BaseException以确保不会被处理Exception的代码意外捕获,这样可以避免退出解释器。(Exception会退出,BaseException不会?) |
TypeError | 当一个操作或函数被应用于类型不适当的对象时将被引发。传入参数的类型错误(要求int时传入list)应当导致TypeError,但传入参数的值错误(不要求范围之外)则应当导致 ValueError |
3.7.2 更多异常用法
try:
except Error as msg:
else: # 没有异常时执行
try:
except Error as msg:
finally: # 不管是否有异常,都会被执行
try 工作原理是:(记得有面试会出这种问题!)
1 首先,执行try子句(try和except关键字之间的多行语句)
2 如果没有触发异常,则跳过except子句,执行后面的语句
3 如果在执行try子句时发生了异常,则跳过该子句中剩下的部分(该点需要注意)。如果异常的类型与except关键字后指定的异常相匹配,则会执行except子句,然后跳到try/except代码块之后继续执行。
4 如果发生的异常与except子句中指定的异常不匹配,则它会被传递到外部try语句中;如果没有找到处理程序,则它是一个未处理异常且执行将终止并输出如上所示的消息。
try:
print('1')
open('abc.txt','r')
print("2")
except BaseException as msg:
print("异常了!")
print(msg)
print('3')
可见发生的异常与except子句指定的异常匹配
那如果将BaseException换成其它的异常,如TypeError
try:
print('1')
open('abc.txt','r')
print("2")
except TypeError as msg:
print("异常了!")
print(msg)
print('3')
从结果可以看出:异常不匹配,except子句不再执行。然后传递到外部try语句中。但后面的是否找到处理程序(try原理第4步),是指异常的语句后面可能有try-except? 尝试一下。
def abc():
try:
print('1')
open('abc.txt','r')
print("2")
try:
abc()
except FileNotFoundError as info:
print(info)
print('4')
except TypeError as msg:
print("异常了!")
print(msg)
print('3')
abc()
没什么区别啊。没弄明白第4步的 如果找到处理程序,和 没有找到处理程序,区别是什么。
3.7.3 抛出异常
def say_hello(name=None):
if name is None:
raise NameError('"your name" cannot be empty')
else:
print('hello, %s' %name)
say_hello()
从结果可见,确实抛出了异常,而且错误信息就是我们设置的语句:"your name" cannot be empty
那么NameError是固定的,还是可以随便起名么?
def say_hello(name=None):
if name =='ssd':
raise NameEMError('"your name" cannot be empty')
else:
print('hello, %s' %name)
say_hello()
从结果可见,NameError不能随便起名
书中这样写到: raise只能使用Python提供的异常类,如果想要raise使用自定义异常类,则自定义异常类需要继承Exception类。
但Python官网中关于自定义异常,尤其是如何继承Exception类,没有详细的描写,暂时放弃这块。
https://docs.python.org/zh-cn/3/tutorial/errors.html?highlight=raise#user-defined-exceptions
def say_hello(name=None):
if name is None:
raise NameError('"name" cannot be empty')
elif name == 'sb':
raise NameError('"name" contains not allowed word')
else:
print('hello, %s' %name)
say_hello('sb')
3.8 新手常犯的错误
1 要用4个空格或tab键进行缩进。但在一个语句体中不要混合使用空格和tab
2 大部分方法两边带的下画线是双下画线
3 项目不要都创建在Python的安装目录中
4 Python程序文件路径中,尽量避免出现中文或空格。可能导致部分编辑器无法运行。
4 创建的目录与文件名,不要与引用类库同名。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!