异常处理

Posted liuafan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理相关的知识,希望对你有一定的参考价值。

错误分类:

1.语法错误: 你程序未执行之前,pycharm已经给你做了提示了.

name

if  1> 0 ;

  pass

age = 3

2. 逻辑错误

num = int(input(‘>>>‘))

 

什么是异常?

由错误引发的,而且 出现异常就会终止程序

 

为什么要进行异常处理?

1.异常就会终止程序,用户体验极差

2.让你的代码不冗余

 

异常处理:

1. if ,异常处理,他只能处理简单的逻辑

num = input(‘>>>‘)

if num.isdigit():

  num = int(num)

  if  1<= num <=5:

    if

else:

  print(‘有非数字类型‘)

2.try 异常处理

遇到报错信息,防止程序终止,执行另一个语句.

2.1单独一个条件,单支.

try:

  num = int(input(‘>>>‘))       #ValueError

  name          #NameError

    # if 1 > 0; # SyntaxError

  dic = {}
  dic[‘key‘]   #KeyEroor

except NameError:

  print(‘出现了NameError错误‘)

2.2多分支

try:
num = int(input(‘>>>‘)) #ValueError
# name # NameError
# dic = {}
# dic[‘key‘] # KeyError
# li = [1,2,3]
# li[10] # IndexError
# import ac # ImportError
except NameError:
print(‘出现了NameError错误‘)
except ValueError:
print(‘出现了ValueError错误‘)
except KeyError:
print(‘出现了KeyError错误‘)

print(222)
print(333)
print(114441)
class A:
def __str__(self):
return ‘list index out of range‘
a1 = A()
print(a1)
# 3 万能异常处理.
# try:
# # num = int(input(‘>>>‘)) #ValueError
# # name # NameError
# dic = {}
# # dic[‘key‘] # KeyError
# li = [1,2,3]
# li[10] # IndexError
# import ac # ImportError
# except Exception as e:
# # print(‘您输入的不规范,请重新输入...‘)
# print(‘稍等片刻,去去就来...‘)
# 异常处理的两种结局方式:
# 1,只是显示错误信息,不终止程序就行. 万能的
# 2,针对不同的错误,提示不同的信息,进行不同的操作. 多分支

# def login():
# pass
#
# def regsiter():
# pass
#
# def article():
# pass
#
# def dariy():
# pass
# dic = {
# 1:login,
# 2:regsiter,
# 3:article,
# 4:dariy,
# }
# while True:
# choice = input(‘请输入:‘)
# if choice.isdigit():
# choice = int(choice)
# if 1 <= choice <=4:
# dic[choice]()
#
# else:
# print(‘请范围内的数字...‘)
# else:
# print(‘请输入数字...‘)
# while True:
# try:
# choice = int(input(‘请输入:‘))
# dic[choice]()
# except ValueError:
# print(‘请输入数字...‘)
# except KeyError:
# print(‘请范围内的数字...‘)
# 4 多分支+万能.

# while True:
# try:
# choice = int(input(‘请输入:‘))
# dic[choice]()
# except ValueError:
# print(‘请输入数字...‘)
# except Exception as e:
# print(e)
# except KeyError:
# print(‘请范围内的数字...‘)

# try:
# choice = int(input(‘请输入:‘))
# except ValueError:
# print(‘请输入数字...‘)
# except KeyError:
# print(‘请范围内的数字...‘)
# except Exception as e:
# print(e)


# 2.5 try except except ... else
# 如果程序出现异常执行except,就不会执行else,反之则执行else
# try:
# print(‘我的卡扣除100元‘)
# print(‘旭哥的卡增加了100元‘)
# except NameError:
# print(‘转账出现异常...‘)
# else:
# print(‘转账成功‘)

#2.6
# try except except ... else .finally
# try finally
# try:
# print(‘我的卡扣除100元‘)
# name
# print(‘旭哥的卡增加了100元‘)
# except NameError:
# print(‘转账出现异常...‘)
# else:
# print(‘转账成功‘)
# finally:
# print(‘6666666‘)

# 666不执行
# name
# print(666)
# try:
# name
# finally:
# print(666)
# try:
# f = open(‘t1‘,encoding=‘utf-8‘)
# print(f.read())
# ‘‘‘多个文件句柄的操作‘‘‘
# f.write()
# finally:
#
# f.close()
# print(666)
# 最后close()
# f.close()

# def func():
# try:
# return 555
# finally:
# ‘‘‘代码块‘‘‘
# print(777)
# func()
# try finally 关闭文件句柄,关闭数据库的链接,关闭网络链接等等

# 2.7 主动触发异常
# raise TypeError(‘类型错误‘)

# class Payment:
# def pay(self,money):
# raise TypeError(‘你的类中应该用一个pay方法‘)
#
# class QQ(Payment):
# def pay(self,money):
# print(‘您用qq支付了%s元‘ % money)
#
#
# class Wechat(Payment):
# def pay(self,money):
# print(‘您用微信支付了%s元‘ % money)
#
# def pay(obj,money):
# obj.pay(money) # a1.pay(200)
#
# q1 = QQ()
# w1 = Wechat()
# pay(w1,1000)

#2.8 自定义异常 (大项目,针对于python不具备的一些错误类型.)
# raise TypeError(‘类型错误‘)
# name1 : python解释器没法解决的错误: 周星星


# class 周星星(BaseException):
# def __init__(self,msg):
# self.msg=msg
# def __str__(self):
# return self.msg
#
# # # raise EvaException(‘EvaException:错误!!!!‘ )
# # # raise TypeError(‘EvaException:错误!!!!‘ )
# try:
# raise 周星星(‘EvaException:错误!!!!‘ )
# except 周星星 as e: # e = EvaException(‘类型错误‘)
# print(e)

# 断言 源码 主动抛出异常
# condition = 1 > 2
# assert condition # 如果条件不满足强行终止.
# print(111)
# print(222)
# print(113331)
# print(5455)
# if 1 == 2:
# print(111)
# print(222)
# print(113331)
# print(5455)

‘‘‘
1,try ...except 单个情况
2,try except except..... 多分支,针对多个你已知的异常,分别导向不同的代码. *
3,try except Exception as e: 万能异常处理. 你对出现的异常错误未知,你要用万能的. *
# 1,只是显示错误信息,不终止程序就行. 万能的
# 2,针对不同的错误,提示不同的信息,进行不同的操作. 多分支,多分支+ 万能
4,try except except except Exception as e: 多分支 + 万能 *

5,try except except... else 出现异常就不执行else代码反之则执行.
6,
try except except... else,finally 不常用
try finally * 涉及到关闭文件句柄,网络链接,数据库链接等等.
7, raise
8, 自定义异常处理.
9 assert
‘‘‘
































































































































































































































以上是关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章

使用片段中的处理程序时出现非法状态异常

Java异常处理机制

java 反射代码片段

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

片段中的Android致命异常