Python基础08.异常与处理

Python3.7错误和异常

Python有两种错误很容易辨认:语法错误和异常。

Python常见异常总结:

异常 描述
AssertionError 断言语句(assert)失败
AttributeError 尝试访问未知的对象属性
ImportError 导入模块失败
IndexError 索引超出序列范围
KeyError 字典中查找一个不存在的关键字
MemoryError 内存溢出,可通过删除对象释放内存
NameError 尝试访问一个不存在的变量
OSError 操作系统产生的异常(如打开一个不存在的文件)
OverflowError 数值运算超出最大限制
SyntaxError 语法错误
TypeError 不同类型间的无效操作
ValueError 传入无效的参数
ZeroDivisionError 除数为零

异常处理

(1)try-except语句

语法:

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

try语句按照如下方式工作:

  • 首先,执行try语句(在关键字try与关键字except之间的语句)
  • 如果无异常发生,忽略except子句,try子句执行后结束
  • 如果在执行try子句的过程中,发生了异常,那么try子句余下的部分将被忽略。如果异常类型和except之后的名称相符,那么对应的except子句将被执行。最后执行try子句余下部分的代码
  • 如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try

example1:

try:
	a=10/0
	print(a)
except ZeroDivisionError :
    print('除数不能为零')
结果:
   除数不能为零

example2:

try:
	a=10/0
	print(a)
except ZeroDivisionError as error:
	print('运算错误\n原因是:',str(error))
结果:
运算错误
原因是: division by zero
  • 一个try语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。如下:

    try:
    	int("abc")
    	s = 1 + '1'
    	f = open('test.txt')
    	print(f.read())
    	f.close()
    except OSError as error:
    	print('打开文件出错\n原因是:' + str(error))
    except TypeError as error:
    	print('类型出错\n原因是:' + str(error))
    except ValueError as error:
    	print('数值出错\n原因是:' + str(error))
    	结果:
    	数值出错
    	原因是:invalid literal for int() with base 10: 'apple'      #最多执行一个分支
    
  • 一个 except 子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。仍是最多只有一个分支会被执行。如下:

    try:
    	s = 1 + '1'
    	int('apple')
    	f = open('test.txt')
    	print(f.read())
    	f.close()
    except (OSError, TypeError, ValueError) as error:
    	print('出错了!\n原因是:' + str(error))
    	结果:
    	出错了!
    	原因是:unsupported operand type(s) for +: 'int' and 'str'
    
(2)try-except-finally语句

语法:

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

不管try子句里面有没有发生异常,finally子句都会被执行。

如果一个异常在try子句里被抛出,而又没有任何的except把它截住,那么这个异常会在finally子句执行后被抛出。如:

def divide(x, y):
try:
    result = x / y
    print("result is", result)
except ZeroDivisionError:
    print("division by zero!")
finally:
    print("executing finally clause")
divide(2,1)
divide(2,0)
divide('a','b')

结果:
result is 2.0
executing finally clause       # divide(2,1)
division by zero!
executing finally clause       # divide(2,0)
executing finally clause
TypeError: unsupported operand type(s) for /: 'str' and 'str'       # divide('a','b')
(3)raise语句

Python使用raise语句抛出一个指定异常

try:
	raise NameError('problem here')
except NameError:
	print('这是一个指定异常!')
结果:
	这是一个指定异常!
发布了23 篇原创文章 · 获赞 0 · 访问量 635

猜你喜欢

转载自blog.csdn.net/qq_43824915/article/details/102825072