异常处理、网络编程

一、什么是异常

1、定义:

异常就是程序运行发生错误,在程序出现错误是,则会产生一个异常,若程序没有处理它,则会抛出异常,程序也会随之终止

2、一个异常分为三部分:

异常的追踪信息

异常的类型

异常的值

二、异常的种类

1、语法异常

这类异常应该在程序执行前就改正

2、逻辑异常

#索引错误
# IndexError
# l=['a','b']
# l[100]

#字典的索引key值出现错误
# KeyError
# d={'a':1}
# d['b']

#自定义类,以及引入模块属性错误
# AttributeError:
# class Foo:
#     pass
#
# Foo.x
# import os
# os.aaa

#分割出现错误,零不能做分母
# ZeroDivisionError
# 1 / 0

#打开文件不存在错误
# FileNotFoundError
# f=open('a.txt','r',encoding='utf-8')

#打开文件出现错误,程序抛出异常,终止程序,文件不能关闭,占用系统资源
# ValueError: I/O operation on closed file.
# f=open('a.txt','r',encoding='utf-8')
# f.close()
# f.readline()

#值错误,int类型不能是字符串
#ValueError: invalid literal for int() with base 10: 'aaaaa'
# int('aaaaa')

#类型错误
# TypeError
# for i in 333:
#     pass

#名字错误,无定义
#NameError
# x
# func()




# def func():
#     import os
#     os.xxxx
#
# func()

三、异常的处理

# 语法:

# 单分支
# try:
#     print('start.....')
#     x=1
#     y
#     l=[]
#     l[3]
#     d={'a':1}
#     d['b']
#     print('end....')
# except NameError:
#     print('变量名没有定义')
#
#
# print('other.....')



# 多分支
# try:
#     print('start.....')
#     x=1
#     # y
#     l=[]
#     l[3]
#     d={'a':1}
#     d['b']
#     print('end....')
# except NameError:
#     print('变量名没有定义')
# except KeyError:
#     print('字典的key不存在')
# except IndexError:
#     print('索引超出列表的范围')
#
#
# print('other.....')




# 多种异常采用同一段逻辑处理
# try:
#     print('start.....')
#     x=1
#     # y
#     l=[]
#     # l[3]
#     d={'a':1}
#     d['b']
#     print('end....')
# except (NameError,KeyError,IndexError):
#     print('变量名或者字典的key或者列表的索引有问题')


# print('other.....')


# 万能异常
# try:
#     print('start.....')
#     x=1
#     # y
#     l=[]
#     # l[3]
#     d={'a':1}
#     # d['b']
#     import os
#     os.aaa
#     print('end....')
# except Exception:
#     print('万能异常---》')
#
#
# print('other.....')



# 获取异常的值,通过as赋值给变量e,通过打印就能看到返回结果
# try:
#     print('start.....')
#     x=1
#     y
#     l=[]
#     l[3]
#     d={'a':1}
#     d['b']
#     import os
#     os.aaa
#     print('end....')
# except Exception as e:
#     print('万能异常---》',e)
#
#
# print('other.....')




# try:
#     print('start.....')
#     x=1
#     # y
#     l=[]
#     l[3]
#     d={'a':1}
#     d['b']
#     import os
#     os.aaa
#     print('end....')
# except NameError as e:
#     print('NameError: ',e)
#
# except KeyError as e:
#     print('KeyError: ',e)
#
# except Exception as e:
#     print('万能异常---》',e)
#
#
# print('other.....')



# try....else...
# else: 不能单独使用,必须与except连用,意思是:else的子代码块会在被检测的代码没有出现过任何异常的情况下执行

# try:
#     print('start.....')
#     # x=1
#     # # y
#     # l=[]
#     # l[3]
#     # d={'a':1}
#     # d['b']
#     # import os
#     # os.aaa
#     print('end....')
# except NameError as e:
#     print('NameError: ',e)
#
# except KeyError as e:
#     print('KeyError: ',e)
#
# except Exception as e:
#     print('万能异常---》',e)
#
# else:        #万能模板执行就不会执行else的内容,except类似于elif语句,一个成立,就不会执行其他的条件
#     print('在被检测的代码块没有出现任何异常的情况下执行')
# print('other.....')


# try...finally....#无论有没有发生异常都会被执行
# try:
#     print('start.....')
#     # x=1
#     # # y
#     # l=[]
#     # l[3]
#     # d={'a':1}
#     # d['b']
#     # import os
#     # os.aaa
#     print('end....')
# except NameError as e:
#     print('NameError: ',e)
#
# except KeyError as e:
#     print('KeyError: ',e)
#
# except Exception as e:
#     print('万能异常---》',e)
#
# else:
#     print('在被检测的代码块没有出现任何异常的情况下执行')
# finally:
#     print('无论有没有异常发生,都会执行')
# print('other.....')




# finally的子代码块中通常放回收系统资源的代码
# try:
#     f=open('a.txt',mode='w',encoding='utf-8')
#     f.readline()
#
# finally:
#     f.close()        #有没有异常都会被执行,放回收资源的代码块,即使有异常文件也会被关闭
#
# print('other....')




# 主动触发异常,条件不成立使用raise TypeError主动触发异常
# raise TypeError('类型错误')



# class People:
#     def __init__(self,name):
#         if not isinstance(name,str):
#             raise TypeError('%s 必须是str类型' %name)
#
#         self.name=name
#
# p=People('egon')





# 断言
print('part1........')
stus=['egon','alex','wxx','lxx']
# stus=[]
#

# if len(stus) <= 0:
#     raise TypeError           #TypeError后面内容可以没有
assert len(stus) > 0            #条件满足则断言生效,生效一次
#
# print('part2.........')
# print('part2.........')
# print('part2.........')
# print('part2.........')
# print('part2.........')
# print('part2.........')



# 自定义异常
# class RegisterError(BaseException):
#     def __init__(self,msg,user):
#         self.msg=msg
#         self.user=user
#
#     def __str__(self):
#         return '<%s:%s>' %(self.user,self.msg)
#
# raise RegisterError('注册失败','teacher')
#





# age=input('>>: ').strip() #age='aaa'
#
# if age.isdigit():
#     age=int(age)
#
#     if age > 10:
#         print('too big')
#     elif age < 10:
#         print('too small')
#     else:
#         print('you got it')

四、什么时候用异常

原文地址:https://www.cnblogs.com/sui776265233/p/8876981.html