5-2python语法基础-异常操作

 ###############    python-异常的操作  ###############

# 异常:python解释器遇到一个错误,会停止程序的执行,并且提示错误信息,这就是异常,
# 抛出异常:python停止程序,提示错误,这就是抛出异常
# 捕获异常:
# 捕获异常的语法:
# try:
#   尝试执行的代码
# except:
#   出现错误的处理
try:
    num=int(input('请输入一个整数:'))
except:
    print('请输入正确的整数')
print('------------')  # 无论上面的代码是否有错误,都会执行下面的代码,
# 错误类型捕获
# 抛出的异常可能是不同类型的错误,我们需要对不同的错误类型,做出不同的响应,
# 在python抛出异常的最后一行的第一个单词就是捕获的错误类型,
# 捕获错误类型的语法:
# try:
#   尝试执行的代码
# except 错误类型1:
#   出现错误的处理
# except (错误类型2,错误类型3):
#   出现多个错误的处理
# except Exception as result:# 捕获未知错误,未知错误就是没有预判到的错误,这是非常固定的语法!!
#   print('未知错误%s'%result)

try:
    num=int(input('请输入一个整数'))
    result=8/num
    print(result)
except ZeroDivisionError:
    print('输入不能是0')
except ValueError:
    print('输入必须是整数')
except Exception as result:
  print('未知错误%s'%result)

# 总结:
# 捕获异常的完整语法:
# try:
#   尝试执行的代码
# except 错误类型1:
#   出现错误的处理
# except (错误类型2,错误类型3):
#   出现多个错误的处理
# except Exception as result:# 捕获未知错误,未知错误就是没有预判到的错误,这是非常固定的语法!!
#   print('未知错误%s'%result)
# else:
#   没有异常才会执行的代码
# finally:
#   不管有没有异常都会执行的代码

 

 ###############    常见异常  ###############

"""

AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的


"""

 

 ###############    主动触发异常  ###############

try:
    raise TypeError('类型错误')
except Exception as e:
    print(e)

 

 ###############    自定义异常  ###############

class xxxException(BaseException):
    def __init__(self,msg):
        self.msg = msg
    def __str__(self):
        return self.msg

try:
    raise xxxException("123")
except xxxException as e:
    print(e)


# 第二种方式
def func():
    try:
        for i in range(5):
            if i > 2:
                raise Exception("数字大于2了")
    except Exception as e:
        print(e)

func()

 

##############################################


打印更加丰富的异常信息

代码

import traceback

try:
    a = 1/0
except Exception as e:
    print('str(e):\t', e)
    print('repr(e):\t', repr(e))

    print('traceback.format_exc():\n%s' % traceback.format_exc()) #字符串
    traceback.print_exc() #执行函数

 

输出:

str(e):      division by zero
repr(e):     ZeroDivisionError('division by zero')
traceback.format_exc():
Traceback (most recent call last):
  File "/Users/ace/Play/test/异常信息.py", line 4, in <module>
    a = 1/0
ZeroDivisionError: division by zero

Traceback (most recent call last):
  File "/Users/ace/Play/test/异常信息.py", line 4, in <module>
    a = 1/0
ZeroDivisionError: division by zero
 

traceback.format_exc()和traceback.print_exc()都可以打印完整的错误信息

traceback.format_exc()返回值为字符串

traceback.print_exc()是一个执行函数,直接在控制台打印错误信息

 

 

 

 

 

 

######

 













posted @ 2020-02-11 05:37  技术改变命运Andy  阅读(157)  评论(0编辑  收藏  举报