小甲鱼python教程32-33讲--python异常 笔记及习题答案

1.python标准异常总结:
小甲鱼python教程32-33讲--python异常 笔记及习题答案_第1张图片

2.检测python异常并处理
1)try-except语句:

try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码

使用例子:

try:
  int('abc')
  sum=1+'1'
  f=open('我为什么是一个文件.txt')
  print(f.read())
  f.close()
except OSError as reason:
  print('文件出错啦\错误原因是'+str(reason)    )
except TypeError as reason:
  print('文件出错啦\错误原因是'+str(reason)    )
except ValueError as reason:
  print('文件出错啦\错误原因是'+str(reason)    )

返回结果为:
文件出错啦\错误原因是invalid literal for int() with base 10: 'abc'
#注:若有多个错误先返回第一个

或者

try:
  int('abc')
  sum=1+'1'
  f=open('我为什么是一个文件.txt')
  print(f.read())
  f.close()
except (OSError,TypeError,ValueError) :
  print('出错啦')
#注:
将三种错误合成一个元组进行检测,还要有一个出错,就报错

2)try-finally语句

try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码
finally:
    无论如何都会被执行的代码

3)raise语句
自己引起一个异常

raise ZeroDivisionError('除数为0')

32讲习题部分答案
1.请问一下代码是否会产生异常,如果会的话,请写出异常的名称:

mylist=[1,2,3,4,,]

语法错误:SyntaxError:invalid syntax

2.请问一下代码是否会产生异常,如果会的话,请写出异常的名字:

mylist=[1,2,3,4,5]
print(mylist[len(mylist)])

IndexError,由于len(mylist)长度为5,5超出了mylist的索引范围

3.请问一下代码是否会产生异常,请写出异常的名称

mylist=[3,5,1,4,2]
mylist.sorted()

AttributionError,sorted是字符串的内置方法,列表的内置方法,列表的内置方法是list.sort()。

4.如果一下代码是否会产生异常,如果会的话,请写出异常的名字:

mydict={‘host’:'www.123.com','port':'80'}
print(mydict['server'])

异常名称:KeyError 因为字典中没有‘server’这个键
为了避免这个异常的发生,可以使用dict.get()方法

if not mydict.get('server'):
    print('您访问的键不存在')

5.请问下面是否会产生异常,请写出异常的名称

def myfun(x,y):
    print(x,y)
f(x=1,2)

如果使用关键字参数的话,需要两个参数均使用关键自参数

6.请写出一下程序异常的名称

f=open(r'c:\test.txt',wb)
f.write('i love u')
f.close()

open有两个参数,应该是‘wb’,python会把其当做变量名,引发NameError

33讲习题答案
0.我们使用什么方法处理程序中出现的异常?

try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码

1.一个try语句可以和多个except语句搭配么?为什么?

可以,因为try语句中可能出现多类异常,利用多个except语句可以捕获并处理我们感兴趣的异常

2.如何同一处理多类异常?

try:
  int('abc')
  sum=1+'1'
  f=open('我为什么是一个文件.txt')
  print(f.read())
  f.close()
except (OSError,TypeError,ValueError) :
  print('出错啦')

2.之前玩的一个小程序,只要输入非整形数据,程序会like蹦出一场,请使用一下处理方法:

import random

secret=random.randint(1,10)
try:
  temp=input("数字:")
  guess=temp#将guess等于了一个字符串
except(ValueError,EOFError,KeyboardInterrupt):
  print('输入错误!')#排除错误
  guess=secret
print('不猜了')

你可能感兴趣的:(小甲鱼python教程)