Python_异常

  • 一、异常类:Exception(父类)
• 1)==NameError==:变量未定义出现的异常
• 2)==SystaxError==:解释器发现语法错误
• 3)==ZeroDivisionError==:除数为0引发的异常
• 4)==IndexError==:引用了序列不存在的索引
• 5)==FileNotFoundError==:打开的文件不存在
• 6)==AttributeError==:引用对象属性错误
• 7)==KeyError==:引用字典键出现异常
• 8)==ValueError==:输入值的异常
  • 二、异常处理方法
  • 格式1
  • 格式2
  • 二、抛出异常
  • 1、raise语句
  • 2、assert语句
  • 练习


一、异常类:Exception(父类)

1)NameError:变量未定义出现的异常

print(x)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-fc17d851ef81> in <module>
----> 1 print(x)

NameError: name 'x' is not defined

2)SystaxError:解释器发现语法错误

print(输出")
File "<ipython-input-2-a059c218dc13>", line 1
    print(输出")
              ^
SyntaxError: EOL while scanning string literal

3)ZeroDivisionError:除数为0引发的异常

x=3
print(x/0)
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-3-05a4b0e8c31f> in <module>
      1 x=3
----> 2 print(x/0)

ZeroDivisionError: division by zero

4)IndexError:引用了序列不存在的索引

x=[1,2,3]
print(x[3])
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-4-4a15b24093c7> in <module>
      1 x=[1,2,3]
----> 2 print(x[3])

IndexError: list index out of range

5)FileNotFoundError:打开的文件不存在

with open("aa.txt") as f:
    text=f.read
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-5-9aefc80fb8e9> in <module>
----> 1 with open("aa.txt") as f:
      2     text=f.read

FileNotFoundError: [Errno 2] No such file or directory: 'aa.txt'

6)AttributeError:引用对象属性错误

x=4
print(x.shape)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-6-794f52637314> in <module>
      1 x=4
----> 2 print(x.shape)

AttributeError: 'int' object has no attribute 'shape'

7)KeyError:引用字典键出现异常

x={"name":'xin'}
print(x["nama"])
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-8-f9df4bcb3387> in <module>
      1 x={"name":'xin'}
----> 2 print(x["nama"])

KeyError: 'nama'

8)ValueError:输入值的异常

x=int(input("请输入整数:"))
请输入整数:x
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-27-19e32395f263> in <module>
----> 1 x=int(input("请输入整数:"))

ValueError: invalid literal for int() with base 10: 'x'

二、异常处理方法

格式1

# 格式1
try:
    要测试的代码
except:
    异常处理代码
try:
    print(y)
except:
    print("y没有定义")
print("测试完成!")
y没有定义
测试完成!
try:    
    print("开始测试!")
    print("第一步")
    n1=int(input("输入第一个数字:"))
    n2=int(input("输入第二个数字:"))
    print(n1/n2)
    with open("aa.txt") as f:
        text=f.read()
        
except ZeroDivisionError:
    print("第二步")
    print("0不能作为除数")

except ValueError:
    print("第三步")
    print("输入不是数字")
    
except Exception as err:
    print("第四步")
    print("出现其他错误异常:\n",err)
    
print("结束")
开始测试!
第一步
输入第一个数字:2
输入第二个数字:4
0.5
第四步
出现其他错误异常:
 [Errno 2] No such file or directory: 'aa.txt'
结束

格式2

# 格式2
   try:
        要测试的代码
    except:
        异常处理代码
    else:
        没有异常的语句
    finally:
        无论是否发生异常都会被执行
try:    
    print("开始测试!")
    print("第一步")
    n1=int(input("输入第一个数字:"))
    n2=int(input("输入第二个数字:"))
    print(n1/n2)
    with open("aa.txt") as f:
        text=f.read()
        
except ZeroDivisionError:
    print("第二步")
    print("0不能作为除数")

except ValueError:
    print("第三步")
    print("输入不是数字")
    
except Exception as err:
    print("第四步")
    print("出现其他错误异常:\n",err)

finally:
    print("第五步")
print("结束")
开始测试!
第一步
输入第一个数字:2
输入第二个数字:4
0.5
第四步
出现其他错误异常:
 [Errno 2] No such file or directory: 'aa.txt'
第五步
结束

二、抛出异常

让程序在执行过程中主动抛出异常问题

1、raise语句

# 格式
raise 异常类对象 ("出现异常的提示信息")
x=int(input("请输入小于五的整数"))
if x>5:
    raise ValueError ("输入的数据需小于五,您现在输入的是",x)
print("结束")
请输入小于五的整数6
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-24-ce2ded1a17a0> in <module>
      1 x=int(input("请输入小于五的整数"))
      2 if x>5:
----> 3     raise ValueError ("输入的数据需小于五,您现在输入的是",x)
      4 print("结束")

ValueError: ('输入的数据需小于五,您现在输入的是', 6)

2、assert语句

# 格式
assert 逻辑表达式 data(data是字符串 提示文本)
等价于if not 逻辑表达式:
    raise AssertionError (data)
try:
    x=int(input("请输入小于五的整数"))
    assert x<=5,"输入的数据大于五"
finally:
    print("结束")
请输入小于五的整数6
结束
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-10-ec7fa80a7b43> in <module>
      1 try:
      2     x=int(input("请输入小于五的整数"))
----> 3     assert x<=5,"输入的数据大于五"
      4 finally:
      5     print("结束")

AssertionError: 输入的数据大于五

练习

假设成年人的体重和身高存在某种关系:
身高(cm)-100=标准体重(kg)
如果一个人的体重与其标准体重的差值在正负5%之间,显示“体重正常”否则显示“体重超标”或“体重不达标”
身高小于30cm 大于250cm为异常情况。

try:
    h=int(input("请输入身高:"))
    if h<30 or h>250:
        raise ValueError ("身高输入异常")
        raise Exception
    g=int(input("请输入体重:"))
    g_min=h-h*0.05
    g_max=h+h*0.05
    if g_min<=g<=g_max:
        print("体重正常")
    elif g<g_min:
        print("体重不达标")
    elif g>g_max:
        print("体重超标")
    else:
        print("体重输入有误")
finally:
    print("结束")
请输入身高:3
结束
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-23-34b7e314f661> in <module>
      8     h=int(input("请输入身高:"))
      9     if h<30 or h>250:
---> 10         raise ValueError ("身高输入异常")
     11         raise Exception
     12     g=int(input("请输入体重"))

ValueError: 身高输入异常
请输入身高:150
请输入体重:40
体重不达标
结束