循环与异常

1. 循环操作
if、while条件判断中的False值:
	1、None
	2、False
	3、任何表示0的数值类型:0; 0.0; 0j
	4、空序列:空列表、空元组、空字符串
	5、空映射:空字典、空集合

if语句
num = 5     
if num == 3:            # 判断num的值
    print 'boss'        
elif num == 2:
    print 'user'
elif num == 1:
    print 'worker'
elif num < 0:           # 值小于零时输出
    print 'error'
else:
    print 'roadman'     # 条件均不成立时输出

******************************* for 语句 *********************************************
range(3):生成数组[0,1,2]
range(1,3):生成从1开始的数组:[1,2]
range(1,9,2):生成从1开始,9结束,步长为2的数组:[1,3,5,7]

1、登录失败3次则正常退出for循环,执行for-else语句,退出系统;
2、若for循环执行了break,则不执行for中最后的else语句
for i in range(3):
    userName = input("userName:")
    passWord = input("passWord:")
    if _userName == userName and _passWord == passWord :
        print("user login success!")
        break
    else:
        print("user name or password error!")
else:
    print("user login 3 times error and exit")

while 语句
1、当while循环中是有break结束循环时,则跳过else语句;否则执行完while语句后就执行else语句
while 条件:
	语句一
else:
	语句二

1、登录失败3次则正常退出while循环,执行for-else语句,退出系统
2、若while循环执行了break,则不执行while中最后的else语句
flag = 0
while flag < 3:
    userName = input("userName:")
    passWord = input("passWord:")
    if _userName == userName and _passWord == passWord :
        print("user login success!")
        break
    else:
        print("user name or password error!")
    flag += 1
else:
    print("user login 3 times error and exit")
异常处理
一、异常信息处理
try:
	#优先执行代码块
except Exception as e:
	#上述代码块执行异常则执行本代码块
	#e是Exception的对象,包含异常信息
else:
	#上述try代码块如果正常执行,则继续执行本代码块
finally:
	#无论上述代码怎么执行,本模块都要执行本代码块


二、异常信息处理
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

try:
	#代码块
except IndexException as e:#索引类异常处理
	#上述代码块执行异常则执行本代码块
except ValueException as e:#值转换类异常处理
	#上述代码块执行异常则执行本代码块
except Exception as e:#所有类异常处理
	#上述代码块执行异常则执行本代码块
else:
	#try代码块执行无异常,则正常执行本代码块
finally:
	#无论上述代码怎么执行,本模块都要执行

三、主动触发异常
try:
	#代码块
	raise Exception("主动跳转到下面异常模块")
except Exception as e:#异常处理
	#上述代码块执行异常则执行本代码块

四、自己封装异常
class MyError(Exception):
	def __init__(self,msg):
		self.message = msg
	def __str__(self):#打印MyError类的实例化对象时会调用本方法
		return self.message
try:
	#代码块
	raise MyError("主动跳转到下面异常模块")
except MyError as e:#索引类异常处理
	print(e)#e是MyError类的实例化对象,print(e)调用MyError类的__str__方法

五、断言异常错误
assert 表达式 #如果表达式成立,则忽略本语句;否则触发AssertionError异常
assert 1==1 #永远成立,没有意义

六、异常详细信息
traceback.print_exc()是直接打印错误

还可以用traceback.format_exc()返回字符串,可将错误信息保存在文档日志中

可以说traceback.print_exc()等同于print traceback.format_exc()
 
posted @ 2022-11-17 20:55  大碗麻辣烫  阅读(20)  评论(0)    收藏  举报