在执行的程序中,难免会碰到因为一些原因如输入输出导致致命性错误产生的情况(如因为输入的文件名错误而导致无法运行相关的代码。)。此时你不希望程序直接挂掉,而是通过显示一些信息,使其平稳的结束。此时,就可以使用try,except和else这三个关键字来组成一个包容性很好的程序。
try..... except....else
分别解释三个关键字:
try:执行可能会出错的试探性语句,即这里面的语句是可以导致致命性错误使得程序无法继续执行下去
except:如果try里面的语句无法正确执行,那么就执行except里面的语句,这里面可以是错误信息或者其他的可执行语句,你可以不带任何异常类型使用except,但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常。
else:如果try里面的语句可以正常执行,那么就执行else里面的语句(相当于程序没有碰到致命性错误
class F(): def walk(self): print("walking...") a=F() try : a.name except AttributeError: #对象中没有该属性是就会走except后的代码 print("你好") else: print("中国您好")"
结果:
你好
使用except而带多种异常类型
try: 正常的操作 ...................... except(Exception1[, Exception2[,...ExceptionN]]]): 发生以上多个异常中的一个,执行这块代码 ...................... else: 如果没有异常执行这块代码
异常类型
常名称 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
try: <语句>
except ValueError:
print(出错了走这里)
else:
print('没有错走这个”)
finally: <语句> #不管有没有错都要走这个语句,即使函数中有return也要走finally raise
assert
assert 中文断言,当这个关键字后面的条件为假时,程序为自动抛出断言异常。主要用在必须满足某种条件时,后面的代码才执行。
在Python中,assert
是一个用于检查条件是否为真的关键字。它通常用于调试和测试过程中,以确保某个条件为真,否则引发 AssertionError
异常。assert
的语法如下:
assert condition, message
condition
是一个要检查的布尔表达式或条件。message
是一个可选的字符串,用于提供关于断言失败的描述性错误消息。
当 condition
为 False
时,assert
语句会引发 AssertionError
异常,并可以使用 message
提供错误信息。如果 condition
为 True
,则 assert
语句不会产生任何效果,程序将继续执行。
下面是一些示例:
x = 10 # 使用 assert 检查条件 assert x > 0, "x 应该是正数" # 如果条件为 False,会引发 AssertionError 异常
在这个示例中,如果 x
不大于零,assert
语句将引发 AssertionError
异常,错误消息是 "x 应该是正数"。这有助于在代码中放置断言来检查假定的条件,以捕获和诊断程序中的错误。
注意:
- 在生产环境中,通常应该禁用断言,可以通过命令行参数
-O
启动Python,以关闭断言。这是因为断言通常用于开发和测试阶段,而不是生产代码。 - 如果你需要在生产代码中进行错误处理,应该使用异常处理机制而不是
assert
语句。