目录
1、return语句和异常处理问题
return放到方法的最后
syntaxError 语法错误
NameError 尝试访问一个没有申明的变量
ZeroDivisionError 除数为0 的错误
TypeError类型错误
AttributeError 访问的对象不存在的属性
IndexError 索引越界异常
KeyError 字典的关键字不存在
2、try
2.1一个except结构
被监控的可能引发异常的语句块
except BaseException as e:
异常语句块的处理
print("step0")
try:
print("step1")
a=3/0
print("step2")
except BaseException as e:
print("发生异常,0不能整除")
print("step3")
print(e)
print(type(e))
print("end!!")
C:\Users\86189\AppData\Local\Programs\Python\Python310\python.exe C:/Users/86189/PycharmProjects/pythonProject/pythonday9/try.py
step0
step1
发生异常,0不能整除
step3
division by zero
<class 'ZeroDivisionError'>
end!!
进程已结束,退出代码0
有异常就执行异常快 ,无异常就跳过
#循环输入数字,如果不是数字则处理异常,如果输入88,则结束循环
while True:
try:
x=int(input("请输入一个数字"))
print("输入的数字",x)
if x==88:
print("退出程序")
break
except BaseException as e:
print(e)
print("异常输入的不是一个数字")
print("循环数字输入程序结束!")
C:\Users\86189\AppData\Local\Programs\Python\Python310\python.exe C:/Users/86189/PycharmProjects/pythonProject/pythonday9/小测试.py
请输入一个数字88
输入的数字 88
退出程序
循环数字输入程序结束!
进程已结束,退出代码0
2.2多个except 结构
try
被监控的,能引发异常的语句块
except Exception1:
处理exception1的语句块
except Exception2:
处理exception2的语句块
。。
except BaseException:
处理遗漏的语句块
try:
a=input("请输入一个被除数")
b=input("请输入一个除数")
c=float(a)/float(b)
print(c)
except ZeroDivisionError:
print("异常,不能除0")
except ValueError:
print("异常,不能将字符串转为数字")
except NameError:
print("异常,变量不存在")
except BaseException as e:
print(e)
C:\Users\86189\AppData\Local\Programs\Python\Python310\python.exe C:/Users/86189/PycharmProjects/pythonProject/pythonday9/多重except.py
请输入一个被除数6
请输入一个除数0
异常,不能除0
进程已结束,退出代码0
2.3 try ....except..else结构
try:
a=input("请输入一个被除数")
b=input("请输入一个除数")
c=float(a)/float(b)
except BaseException as e:
print(e)
else:
print(e)
print("程序结束")
C:\Users\86189\AppData\Local\Programs\Python\Python310\python.exe C:/Users/86189/PycharmProjects/pythonProject/pythonday9/测试try..except..else结构.py
请输入一个被除数9
请输入一个除数0
float division by zero
程序结束
进程已结束,退出代码0
2.4 try...except..finally结构
无论是否发生异常,finally的语句块都会被执行:通常用来释放try中申请的资源
try:
a=input("请输入一个被除数")
b=input("请输入一个除数")
c=float(a)/float(b)
except BaseException as e:
print(e)
else:
print(e)
finally:
print("无论是否异常都得输出来")
print("程序结束")
C:\Users\86189\AppData\Local\Programs\Python\Python310\python.exe C:/Users/86189/PycharmProjects/pythonProject/pythonday9/finally测试.py
请输入一个被除数6
请输入一个除数0
float division by zero
无论是否异常都得输出来
程序结束
进程已结束,退出代码0
3、_with 上下文管理
#测试with的上下文管理(with 不是用来取代try,只是作为补充,方便我们文件管理,通信网络的开发)
with open("d:/a.txt","r") as f:
content=f.readline()
print(content)
print("程序执行结束!")
C:\Users\86189\AppData\Local\Programs\Python\Python310\python.exe C:/Users/86189/PycharmProjects/pythonProject/pythonday9/with.py
abcd
程序执行结束!
进程已结束,退出代码0
4、_traceback模块的使用
import traceback
try:
print("step1")
num=1/0
except:
traceback.print_exc()
#############将异常信息输出到指定文件中#####
try:
print("step1")
num=1/0
except:
with open("d:/a.txt","a") as f:
traceback.print_exc(file=f)
C:\Users\86189\AppData\Local\Programs\Python\Python310\python.exe C:/Users/86189/PycharmProjects/pythonProject/pythonday9/traceback.py
Traceback (most recent call last):
File "C:\Users\86189\PycharmProjects\pythonProject\pythonday9\traceback.py", line 4, in <module>
num=1/0
ZeroDivisionError: division by zero
step1
step1
进程已结束,退出代码0
5、自定义异常类
class AgeError(Exception):#继承Exception
def __init__(self,errorInfo):
Exception.__init__(self)
self.errorInfo=errorInfo
def __str__(self):
return "年龄错误,年龄应该在1-150之间"
##测试代码
if __name__=="__main__" :#如果为True,则模块是作为独立文件运行,可以测试代码
age=int(input("请输入一个年龄"))
if age <1 or age >150:
raise AgeError(age)
else:
print("正常年龄:",age)
C:\Users\86189\AppData\Local\Programs\Python\Python310\python.exe C:/Users/86189/PycharmProjects/pythonProject/pythonday9/自定义异常类.py
请输入一个年龄166
Traceback (most recent call last):
File "C:\Users\86189\PycharmProjects\pythonProject\pythonday9\自定义异常类.py", line 11, in <module>
raise AgeError(age)
__main__.AgeError: 年龄错误,年龄应该在1-150之间
进程已结束,退出代码1
6、pycharm的调试
见明章