Python_Scrapy_6.错误与异常

看了一下官方教程的第二部分,发现用了异常处理机制.因为我的学习计划是围绕着项目进行了,技能点不够用了就去打打怪提升下等级.


0.编程时会出现的错误和异常

a.代码本身的错误,也就是bug.比如 字符串少打了一个引号,引起的语法错误.

b.代码使用者错误的使用代码而产生的问题. 比如需要带入整数的却带入字符串

c.使用代码是因为运行环境的差异而导致的问题. 比如向硬盘里写入数据时硬盘满了或者坏了.


1.try...except...finally

a.基本的使用方法

try...except...finaly 和if,else一样是控制流语句. 先会运行try中的代码,如果某一行代码出现了异常那么就会转跳到except的代码块中,不管程序是否报错都会执行finally中的代码.

# coding:gbk
try:
    # 错误的路径
    f = open(r'C:\Fallout4.txt')
    print('1')
    print('2')
    print('3')
    print(f.read())
except:
    print('哦偶,哪里弄错了.')
finally:
    print('退出程序')


返回的结果:

哦偶,哪里弄错了.
退出程序

# coding:gbk

try:
    # 正确的路径
    f = open(r'C:\test\Fallout4.txt')
    print('1')
    print('2')
    print('3')
    print(f.read())
except:
    print('哦偶,哪里弄错了.')

finally:
    print('退出程序')

返回的结果

<span style="font-size:18px;"><span style="font-size:18px;">1
2
3
shut up and take my money.
退出程序</span></span>

except还可以加两个参数,需要捕获的错误,和一个错误的原因. 如果有两个except语句,try中的语句快同时又这两个错误,Python只会捕获第一个产生异常(因为直接转跳了).

# coding:gbk

try:
    # 错误的路径
    a
    f = open(r'C:\Fallout4.txt')
    print('1')
    print('2')
    print('3')
    print(f.read())

except NameError, e:
    print('哦偶{0}'.format(e))

except IOError, e:
    print('哦偶{0}'.format(e))



finally:
    print('退出程序'

2.raise

Python认为一切正常,你却需要程序报错要什么办呢? 用raise自己引发一个异常.

# coding:gbk

class FooError(StandardError):
    pass

def foo(s):
    n = int(s)
    if n == 1:
        raise FooError('invaild value:{0}'.format(s))
    return 10/n

foo(1)

结果

Traceback (most recent call last):
  File "C:/Users/bin/PycharmProjects/untitled1/test_raise.py", line 12, in <module>
    foo(1)
  File "C:/Users/bin/PycharmProjects/untitled1/test_raise.py", line 9, in foo
    raise FooError('invaild value:{0}'.format(s))
__main__.FooError: invaild value:1


3.with...as 

with...as 语句是try...except...finally的简化版, with之后跟着特殊的对象 as 一个变量赋值给了那个特殊的变量.

with open(r'c:\test\Fallout4.txt') as anything :
    print (anything.read())

具体可以看下面两个链接:

使用 with as

详细的说明


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值