1、异常处理语句
1.1、try…except语句
语法格式:
try:
block1
except [ExceptionName [as alias]]:
block2
参数说明:
block1:表示可能出错的代码块
ExceptionName [as alias]:可选参数,用于指定要捕获的异常,其中 ExceptionName表示要捕获的异常名称,如果在其右侧加上 as alias 表示当前的异常指定一个别名。
block2:表示进行异常处理的代码块,在这里可以输出固定的提示信息,也可以通过别名输出异常的具体内容
注意:如果except后面不知道异常名称,则表示捕获全部异常。使用try…except语句捕获异常后,程序会继续执行。
1.2、try …except…else语句
try …except…else语句与try …except语句的不同在于当没有异常时,使用else子语句。
例子
def division():
''' 实现功能:分苹果 '''
print("\n-----------------分苹果了-----------------\n")
apple = int(input("请输入苹果个数:"))
children = int(input("请输出一共有几个小朋友:"))
result = apple // children # 计算每个小朋友分几个苹果,输出整数
remain = apple - result * children # 计算剩下的苹果
if remain > 0:
print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,"个,剩下", remain, "个。")
else:
print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result, "个。")
if __name__ == '__main__':
try: # 捕获异常
division()
except ZeroDivisionError: # 处理zero异常
print("\n出错了,不能把苹果分给0个小朋友。")
except ValueError as e: # 处理value异常
print("输入错误:", e)
else: # 没有抛出异常时执行
print("苹果成功分给小朋友。")
1.3、try …except …finally语句
不管是否有异常产生,都会执行finally里的语句
语法格式:
try:
block1
except [ExceptionName [as alias]]:
block2
finally:
block3
例子
def division():
''' 实现功能:分苹果 '''
print("\n-----------------分苹果了-----------------\n")
apple = int(input("请输入苹果个数:"))
children = int(input("请输出一共有几个小朋友:"))
result = apple // children # 计算每个小朋友分几个苹果,输出整数
remain = apple - result * children # 计算剩下的苹果
if remain > 0:
print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,"个,剩下", remain, "个。")
else:
print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result, "个。")
if __name__ == '__main__':
try: # 捕获异常
division()
except ZeroDivisionError: # 处理zero异常
print("\n出错了,不能把苹果分给0个小朋友。")
except ValueError as e: # 处理value异常
print("输入错误:", e)
else: # 没有抛出异常时执行
print("苹果成功分给小朋友。")
finally:
print("进行了一次分苹果操作")
输出:
-----------------分苹果了-----------------
请输入苹果个数:8
请输出一共有几个小朋友:0
出错了,不能把苹果分给0个小朋友。
进行了一次分苹果操作
1.4、使用raise语句抛出异常
如果函数或方法中有异常,却不想在当前函数或方法中处理异常,可以使用raise处理异常。
语法格式:
raise [ExceptionName [(raise)]]
2、使用assert语句调试程序
语法格式:
assert expression [,reason]
说明:
expression: 条件表达式,如果该表达式为真什么,都不用做,如果为假抛出AssertionError异常。
reason:可选参数,用于对判断条件进行描述,为了以后更好的知道哪里出了问题
例子
def division():
''' 实现功能:分苹果 '''
print("\n-----------------分苹果了-----------------\n")
apple = int(input("请输入苹果个数:"))
children = int(input("请输出一共有几个小朋友:"))
assert apple > children, "苹果不够分"
result = apple // children # 计算每个小朋友分几个苹果,输出整数
remain = apple - result * children # 计算剩下的苹果
if remain > 0:
print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,"个,剩下", remain, "个。")
else:
print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result, "个。")
if __name__ == '__main__':
division()
输出:
请输入苹果个数:5
请输出一共有几个小朋友:8
Traceback (most recent call last):
File "D:/Python/web/test.py", line 14, in <module>
division()
File "D:/Python/web/test.py", line 6, in division
assert apple > children, "苹果不够分"
AssertionError: 苹果不够分
通常情况下,assert语句可以和异常处理语句结合使用,把上面的代码的最后一行语句改为
try:
division()
except AssertionError as e:
print("\n输出有误:", e)
输出
-----------------分苹果了-----------------
请输入苹果个数:5
请输出一共有几个小朋友:8
输出有误: 苹果不够分
注意:assert语句只在调试阶段有效。我们可以通过在执行python命令时加入-O(大写)参数来关闭asset语句。
如在命令行窗口下可以使用以下命令
python -O 调试文件.py