文章目录
1.异常
(1)try…(一个)except
try:
print('step1')
a = 3/0
print('step2')
except BaseException as e:#根据请款写不同的类,BaseException是所有异常的根类
print('step3,异常')
print('产生的异常对象:',e)
print('e的类型:',type(e))
print('step3:异常处理结束后,继续执行后面的代码')
'''结果
step1
step3,异常
产生的异常对象: division by zero
e的类型: <class 'ZeroDivisionError'>
step3:异常处理结束后,继续执行后面的代码
'''
小例子:
#循环输入数字,若不是数字则异常,结束循环,若输入88,则退出程序
try:
while True:
a = int(input('输入数字:'))#非数字类型不能转为整形
print(a)
if a == 88:
print('退出程序')
break
except BaseException as e:
print(e)
print('输入的不是数字')
'''结果
输入数字:q
invalid literal for int() with base 10: 'q'
输入的不是数字
'''
(2)try…(多个)except
try:
a = input('输入被除数:')
b = input('输入除数:')
c = float(a)/float(b)
print(c)
except ZeroDivisionError:
print('异常,0不能做除数')
except ValueError:
print('异常,不能将字符串转为数字')
except BaseException:
print('其他异常')
(3). try…except… esle结构
try 之后有异常except,无异常else。再跳出这个模块执行后面的语句
(4)try…except…[else]… finally 结构
#释放资源
try:
f = open('G:\\huhu_boundary\\2019-3.txt','r')
content = f.readline()
print(content)
except:
print('no file')
finally:
try:
f.close()#有无异常都关闭
except BaseException as e:
print(e)
print('程序结束')
(5)常见异常
SyntaxError:语法错误
NameError:尝试访问一个没有什么的变量
ZeroDivisionError:除数为0错误
ValueError:数值错误
TypeError:类型错误
AttributeError:访问对象的不存在属性
IndexError:索引越界异常
KeyError:字典的关键字不存在
2.with上下文管理器
with open('G:\\huhu_boundary\\2019-3.txt') as f:
content = f.readline()
print(content)
print('程序结束')
3.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)
4.自定义异常类
通常继承Exception,命名用Error后缀
class AgeError(Exception):#继承Exception
def __init__(self,errorInfo):
Exception.__init__(self)
self.errorInfo = errorInfo
def __str__(self): #当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
return str(self.errorInfo)+',年龄错误'
if __name__=='__main__':#如果为True,则模块是作为独立文件执行的,可以执行测试代码
age = int(input(' age:'))
if age<1 or age>100:
raise AgeError(age)
else:
print('无异常')
5.pycharm的调试模式
step over:跳过这个函数
step into:若当前是一个函数,则会进入这个函数
step out:若当前在函数内,则跳出函数
run to cursor:运行到光标处