赞
踩
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
1、 格式
try:
<statements> #运行try语句块,并试图捕获异常
except <name1>:
<statements> #如果name1异常发现,那么执行该语句块。
except (name2, name3):
<statements> #如果元组内的任意异常发生,那么捕获它
except <name4> as <variable>:
<statements> #如果name4异常发生,那么进入该语句块,并把异常实例命名为variable
except:
<statements> #发生了以上所有列出的异常之外的异常
else:
<statements> #如果没有异常发生,那么执行该语句块
finally:
<statement> #无论是否有异常发生,均会执行该语句块。
2、关键字
except 异常名:
捕获到指定异常
except (异常名1,异常名2,…):
捕获多个异常
except:
捕获所有异常
我们在捕获这个异常之后假如需要访问它的一些属性,这个时候就可以使用as关键字
try:
raise MyError(2*2)
except MyError as e:
print('My exception occurred, value:', e.value)
raise语句用来手动抛出一个异常
格式:raise [exceptionType[,argument][,traceback]]
def functionName( level ):
if level < 1:
raise Exception("Invalid level!", level) # 执行到这一句聚会抛出这个异常
# 触发异常后,后面的代码就不会再执行
print("异常后不会执行啦!")
functionName(0)
def testRaise(number):
if number < 1:
raise ValueError('Invalid value') #或者 raise ValueError,'Invalid value'
testRaise(0)
常用错误异常
异常名 | 含义 |
---|---|
AttributeError | 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x |
IOError | 输入/输出异常;基本上是无法打开文件 |
ImportError | 无法引入模块或包;基本上是路径问题或名称错误 |
IndentationError | 语法错误(的子类) ;代码没有正确对齐 |
IndexError | 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] |
KeyError | 试图访问字典里不存在的键 |
KeyboardInterrupt | Ctrl+C被按下 |
NameError | 使用一个还未被赋予对象的变量 |
SyntaxError | 语法错误 |
TypeError | 传入对象类型与要求的不符合 |
UnboundLocalError | 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 |
ValueError | 传入一个调用者不期望的值,即使值的类型是正确的 |
可以通过创建一个新的异常类拥有自己的异常,异常应该是通过直接或间接的方式继承自Exception类。
class MyError(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
try:
raise MyError('类型错误')
except MyError as e:
print('My exception occurred', e.msg)
单元测试用来对一个函数,一个类或者一个模块来进行一个正确性的校验工作。
1、使用步骤
1、定义一个类继承unittest.TestCase
2、调用单元测试方法
3、调用unittest.main() 执行测试代码
注意:
单元测试的函数名一般默认以Test_开头
setUp函数:放一些初始化的内容相当于__init__函数
tearDown函数:放对象销毁时的内容相当于__del__函数
class Test(unittest.TestCase):
def setUp(self):
print('开始测试时,自动调用')
def tearDown(self):
print('结束时,自动调用')
def test_mysum(self):
self.assertEqual(add(1,2),3)
if__name == "__main__"
unittest.main()
方法名 | 作用 |
---|---|
assertEqual(值,表达式) | 是否相等 |
assertAlmostEqual() | 是否约等于 |
assertTrue() | 是否为真 |
assertIn() | 是否包含 |
assertIs() | 是否为同引用 |
assertIsNone() | 是否为空 |
assertIsInstance() | 是否某类型实例 |
assertGreater() | 是否大于 |
f = "数值:{}".format(a)
print(f)
f = "数值:{:f}".format(a)
print(f)
f1 = f"数值:{a:f}"
print(f1)
1、正数带上正号
f2 = f"数值:{a:+f}"
print(f2)
2、负数带上负号(正数不会发生改变)
f3 = f"数值:{b:-f}"
print(f3)
f = f"数值:{a:,f}"
print(f)
f = f"数值:{a:,.2f}"
print(f)
使用时需要导入random模块
常用方法
方法名 | 作用 |
---|---|
random.choice(序列名) | 序列(列表,元组,range)中随机选一个值 |
random.sample(序列名, 个数) | 获取指定数目的序列 |
random.shuffle(序列名) | 打乱序列,返回值为空,原序列改变 |
random.randint(最小值,最大值) | 生成范围内的随机整数,两边界都包括 |
random.random() | 生成0~1的小数 |
random.getrandbits(位数) | 生成指定bit位数的随机数 |
1、构造函数
datetime.date(年, 月, 日)
2、常用属性和方法
1、构造函数
t = datetime.time(时,分,秒)
2、常用属性
1、构造函数
dt = datetime.datetime(年,月,日,时,分,秒,微秒)
2、常用属性和方法
1、字符串转日期时间
datetime.datetime.strptime("时间字符串", “格式”)
2、日期转字符串
datetime.datetime.strftime("格式")
3、格式占位符
名称 | 作用 |
---|---|
%Y | 四位年份 |
%y | 二位年份 |
%m | 二位月份 |
%d | 二位日期 |
%H | 二位小时 |
%M | 二位分钟 |
%S | 二位秒数 |
%f | 微秒 |
%w | 星期数(0~6) |
s = "2018-8-11"
dt = datetime.datetime.strptime(s, "%Y-%m-%d")
print(dt)
now = datetime.datetime.now()
print(now.strftime("%y-%m-%d"))
两个datetime对象之差为datetime.timedetla对象
1、常用参数
now = datetime.datetime.now()
print(now)
print(now + datetime.timedelta(days=100)) # 100天以后
print(now + datetime.timedelta(seconds=-29)) # 29分钟前
print(now + datetime.timedelta(minutes=100)) # 100秒以后
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。