欢迎光临
我们一起进阶

python异常处理①——常见异常及其处理

扫码或搜索:沉默王二
发送 290992
即可立即永久解锁本站全部文章

前面讲完了,库类。接下来是异常处理

常见的异常我们在编写程序的时候会遇到许多异常报错,正确的分析这些异常有利于我们及时的作出相应的修改,下面我们来介绍一些常见的异常:常见的异常我们在编写程序的时候会遇到许多异常报错,正确的分析这些异常有利于我们及时的作出相应的修改,下面我们来介绍一些常见的异常:

NameError
print(a)

IndexError: 索引错误
li = [1,2,3,4]
print(li[8])

KeyError
d = dict(a=1, b=2)
print(d[‘f’])

ZeroDivisionError: 除0错误
print(10/(2-2))

class Student(object):
     def init(self, name, age):
         self.name = name
         self.age = age
     def echo(self):
         print(self.name, self.age)

AttributeError: 对象没有该属性
s1 = Student(“westos”, 10)
print(s1.scores)
s1.echo()
s1.echo1()

FileNotFoundError
with open(‘/tmp/passwd9’) as f:
     print(f.read(5))

总结: 在程序运行过程中影响程序正常运行的内容, 称为异常.

try….except……finally……语句
try:
    print(a)
    # 如果出现NameError时, 不报错, 只显示except语句里面执行的内容.
except NameError:
    print('error')
print('hello')

值得注意的是:

捕获异常

try:
    f = open("hello.txt", 'w')
    f.write("这是一个测试文件")

注意: except语句不一定会执行, 只有在try语句中出现IOError报错时, 才会执行.

except IOError as e:

print(e)
print(“没有找到文件或者文件读取失败”)
如果没有捕获到异常, 则执行else语句的内容

else:

print(“文件内容写入成功”)
无论是否捕获到异常, 都执行的语句.

finally:

f.close()
print(“文件已经关闭”)

try:
    f = open('hello.txt', 'w')
    f.seek(0, 0)
    f.read()
except Exception as e:
    print('捕获所有异常')
else:
    print('没有异常')
finally:
    f.close()

try:
    f = open('hello.txt')
    f.seek(0, 0)
    f.read()
except Exception as e:
    print('捕获所有异常')
else:
    print('没有异常')
finally:
    f.close()

另外:

try:
    d = dict(a=1, b=2)
    print(a)
    print(d['c'])
except (KeyError, NameError) as e:
    print(e)
else:
    print('noError')
finally:
    print('always been')

在捕获多个异常时,如果TRY语句里出现异常的第一行代码显示报错,下面的异常将不会显示

抛出异常_触发异常

raise: 关键字, 用来抛出异常.
raise 抛出异常的名称, 抛出异常的详细显示

def get_age(age):
    if 0 < age <= 200:
        print(age)
    else:
        # 如果raise抛出异常, 程序后面的代码不会再执行.
        raise  Exception('invaild age')

get_age(1000)
get_age(100)

如果raise抛出异常, 程序后面的代码不会再执行.

注:所有的异常实际上是一个类, 所以异常的父类都是BaseException.

断言 assert语句

执行下列代码:

ef is_huiwen_num(num):
    snum = str(num)
    return snum == snum[::-1]


# 如果希望程序中的所有assert语句不执行, 那么给python -O 脚本名
if __name__ == "__main__":
    assert is_huiwen_num(101) == True

    assert is_huiwen_num(100) == True, "error"
    print("assert")

运行结果:

由此可见,若代码执行无误时,断言正确不显示,若代码执行中断言判断有误时,会抛出异常,并且后面的不会执行。

Logging模块

import logging
s = ‘0’
n = int(s)

配置日志的信息:

  1). 日志级别: debug, info, warning, error, critical
  2). level: 指日志级别为info及以上的日志信息会被记录到文件中;
  3). format: 指定日志的格式, 可以去logging.Formatter查看参考信息
logging.basicConfig(filename=”hello.log”,level=logging.INFO,
                    format=”%(asctime)s –  %(filename)s[%(lineno)d] – %(levelname)s:  %(message)s”)
logging.debug(“this is a debug info”)
logging.info(“this is a  info”)
logging.warning(“这是一条警告信息”)

赞(1) 打赏
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

小白学堂,学的不止是技术,更是前程

关于我们免责声明

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏