try
块包含着可能引发异常的代码,except
块则用来捕捉和处理发生的异常。- 执行的时候,如果
try
块中没有引发异常,则跳过ecept
块继续执行后续代码; - 执行的时候,如果
try
块中发生了异常,则跳过try
块中的后续代码,跳到相应的except
块中处理异常;异常处理完后,继续执行后续代码
python中一切都是对象,异常也采用对象的方式来处理。
-
try和except结构
try
块包含着可能引发异常的代码,except
块则用来捕捉和处理发生的异常。- 执行的时候,如果
try
块中没有引发异常,则跳过ecept
块继续执行后续代码; - 执行的时候,如果
try
块中发生了异常,则跳过try
块中的后续代码,跳到相应的except
块中处理异常;异常处理完后,继续执行后续代码
小示例
while True:
try:
n=int(input("请输入数字"))
print("您输入的数字是",n)
if n==99:
break
except:
print("输入异常")
2.try...多个except结构
上面的结构可以捕获所有的异常,工作中也很常见。但是,从经典理论考虑,一般建议尽量捕获可能出现的多个异常(按照先子类后父类的顺序),并且针对性的写出异常处理代码。为了避免遗漏可能出现的异常,可以在最后增加BaseException
。结构如下:
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a)/float(b)
print(c)
except ZeroDivisionError:
print("异常:除数不能为0")
except TypeError:
print("异常:除数和被除数都应该为数值类型")
except BaseException as e:
print(e)
print(type(e))
3.else结构
try...except...else
结构增加了else块
。如果try
块中没有抛出异常,则执行else
块。如果try
块中抛出异常,则执行except
块,不执行else
块。
4.finally结构和return语句位置
try...except...finally
结构中,finally
块无论是否发生异常都会被执行;通常用来释放try
块中申请的资源。
return语句和异常处理问题
由于return
有两种作用:结束方法运行、返回值。我们一般不把return
放到异常处理结构中,而是放到方法最后。
5.常见异常汇总说明
Python中的异常都派生自BaseException
类,本节我们测试和列出常见的一些异常,方便初学者掌握。
-
SyntaxError
:语法错误 -
NameError
:尝试访问一个没有申明的变量3.
ZeroDivisionError
:除数为0错误(零除错误)4.
ValueError
:数值错误5.
TypeError
:类型错误6.
AttributeError
:访问对象的不存在的属性7.
IndexError
:索引越界异常8.
KeyError
:字典的关键字不存在常见异常汇总
建议大家通读,把异常相关的单词背下来熟悉一下。这样可以克服“畏难情绪”。
异常名称 说明 ArithmeticError 所有数值计算错误的基类 AssertionError 断言语句失败 AttributeError 对象没有这个属性 BaseException 所有异常的基类 DeprecationWarning 关于被弃用的特征的警告 EnvironmentError 操作系统错误的基类 EOFError 没有内建输入,到达EOF 标记 Exception 常规错误的基类 FloatingPointError 浮点计算错误 FutureWarning 关于构造将来语义会有改变的警告 GeneratorExit 生成器(generator)发生异常来通知退出 ImportError 导入模块/对象失败 IndentationError 缩进错误 IndexError 序列中没有此索引(index) IOError 输入/输出操作失败 KeyboardInterrupt 用户中断执行(通常是输入^C) KeyError 映射中没有这个键 LookupError 无效数据查询的基类 MemoryError 内存溢出错误(对于Python 解释器不是致命的) NameError 未声明/初始化对象 (没有属性) NotImplementedError 尚未实现的方法 OSError 操作系统错误 OverflowError 数值运算超出最大限制 OverflowWarning 旧的关于自动提升为长整型(long)的警告 PendingDeprecationWarning 关于特性将会被废弃的警告 ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象 RuntimeError 一般的运行时错误 RuntimeWarning 可疑的运行时行为(runtime behavior)的警告 StandardError 所有的内建标准异常的基类 StopIteration 迭代器没有更多的值 SyntaxError Python 语法错误 SyntaxWarning 可疑的语法的警告 SystemError 一般的解释器系统错误 SystemExit 解释器请求退出 TabError Tab 和空格混用 TypeError 对类型无效的操作 UnboundLocalError 访问未初始化的本地变量 UnicodeDecodeError Unicode 解码时的错误 UnicodeEncodeError Unicode 编码时错误 UnicodeError Unicode 相关的错误 UnicodeTranslateError Unicode 转换时错误 UserWarning 用户代码生成的警告 ValueError 传入无效的参数 Warning 警告的基类 WindowsError 系统调用失败 ZeroDivisionError 除(或取模)零 (所有数据类型)