Python笔记 - 程序异常之try...except...

Python中try except处理程序异常

1.try … except…:

try:
    语句1
    语句2
    .
    .
    语句N
except ...:
    do something...

try中代码块执行,如果存在错误,就会抛出异常,然后执行except中的代码,否则,跳过except块代码。


  • 无参数的except
try:
    ...
except:
    ...

无参数的except适用于任何异常类型


  • 捕获所有异常对象
try:
    ...
except Exception as e:
    print(Exception,',',e)

获取整个异常对象


  • 采用traceback模块查看异常
    相比于上面获取所有异常的方法,traceback会输出出现错误的行数,便于调试
import traceback
try:
    ...
except:
    traceback.print_exc()

  • sys模块回溯最后的异常
import sys
try:
    ...
except:
    info = sys.exc_info()
    print(info[0],',',info[1])


  • 将异常信息保存在日志文本

将traceback.print_exc()打印在屏幕的信息保存在一个日志文件中

import traceback
try:
    ...
except:
    f = open("c:\\log.txt",'a')
    traceback.print_exc(file = f)
    # 等价于:traceback.print_exc(file = open('c:\\log.txt'.'a'))
    f.flush()
    f.close()

 

2.try … except … else

当没有发生异常时,else中的语句将会被执行

try:
    a = 1
except Exception as e:
    print(e)
else:
    print("No error")
# 最后结果为:No Error

 
3.try … finally

无论是否发生,在程序结束前,finally中的语句都会被执行。

try:
    a = 1
finally:
    print('不用看,我总会被打印的~')  
# 结果为:不用看,我总会被打印的~

 

4.自定义异常类

raise引发一个异常
一个异常是一个类,即类Exception的一个子类

class MyException(Exception):
    pass

nums = [1,2,3,4]
for num in nums:
    if num == 3:
        raise MyException(num)

'''结果为: 
Traceback (most recent call last):
  File "<pyshell#91>", line 3, in <module>
    raise MyException(num)
MyException: 3
'''

即使没有定义MyException的行为(只使用到pass),也可以通过继承父类Exception在抛出异常时输出错误提示。
也可以访问异常对象本身,并输出,例:
raise MyException(‘Hello’)

 

5.Python所有的标准异常类

异常名称描叙
BaseException所有异常的基类
SystemExit解释器请求退出
KeyBoardInterrupt用户中断执行(通常输入^C)
Exception常规错误的基类
StopIteration迭代器没有更多的值
GeneratorExit生成器(generator)发生异常来通知退出
SystemExitPython 解释器请求退出
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零 (所有数据类型)
AssertionError断言语句失败
AttributeError对象没有这个属性
EOFError没有内建输入,到达EOF标记
EnvironmentError操作系统错误的基类
IOError输入/输出操作失败
OSError操作系统错误
WindowsError系统调用失败
ImportError导入模块/对象失败
KeyboardInterrupt用户中断执行(通常是输入^C)
LookupError无效数据查询的基类
IndexError序列中没有没有此索引(index)
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python 解释器不是致命的)
NameError未声明/初始化对象 (没有属性)
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxErrorPython语法错误
IndentationError缩进错误
TabErrorTab和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode相关的错误
UnicodeDecodeErrorUnicode解码时的错误
UnicodeEncodeErrorUnicode编码时错误
UnicodeTranslateErrorUnicode转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,异常处理是非常重要的一部分。当程序运行时如果出现错误,如果没有异常处理,程序就会崩溃。为了避免这种情况,Python提供了异常处理机制。 在Python中,异常处理语句使用 `try` 和 `except` 关键字来实现。`try` 语句块中包含可能会发生异常的代码,如果这段代码出现了异常,则会跳转到 `except` 语句块中执行异常处理代码。 下面是一个简单的例子: ```python try: num = int(input("请输入一个整数:")) print(10/num) except ZeroDivisionError: print("除数不能为0") except ValueError: print("输入的不是整数") ``` 在上面的代码中,我们尝试将用户输入的字符串转换为整数,并将其用作除数计算 10/num。如果用户输入的是 0,则会触发 ZeroDivisionError 异常。如果用户输入的不是整数,则会触发 ValueError 异常。如果发生异常,则会跳转到对应的 except 语句块中执行处理代码。 除了可以指定具体的异常类型,也可以使用 `except Exception` 来捕获所有异常。例如: ```python try: num = int(input("请输入一个整数:")) print(10/num) except Exception as e: print("发生异常:", e) ``` 在上面的代码中,如果发生任何异常,都会跳转到 `except` 语句块中执行处理代码,并将异常信息打印出来。 除了 `try` 和 `except`,还有 `finally` 关键字,它指定的代码块无论是否发生异常都会执行。例如: ```python try: num = int(input("请输入一个整数:")) print(10/num) except Exception as e: print("发生异常:", e) finally: print("程序执行完毕") ``` 在上面的代码中,无论是否发生异常,都会执行 `finally` 中的代码,即输出“程序执行完毕”。 总之,在Python中,异常处理是非常重要的一部分,它可以有效避免程序崩溃,提高程序的健壮性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值