设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 14894|回复: 5
打印 上一主题 下一主题

【Python 第36课】 异常处理

[复制链接]

10

主题

0

好友

52

积分

注册会员

Rank: 2

跳转到指定楼层
楼主
发表于 2013-7-25 19:21:29 |只看该作者 |倒序浏览
本帖最后由 mty1111 于 2013-7-25 19:23 编辑

在程序运行时,如果我们的代码引发了错误,python就会中断程序,并且输出错误提示。


比如我们写了一句:
  1. print int('0.5')
复制代码
运行后程序得到错误提示:
  1. Traceback (most recent call last):

  2. File "C:/Python27/test.py", line 1, in <module>

  3.    print int('0.5')

  4. ValueError: invalid literal for int() with base 10: '0.5'
复制代码
意思是,在test.py这个文件,第1行,print int('0.5')这里,你拿了一个不是10进制能够表示的字符,我没法把它转成int值。

上面的错误可以避免,但在实际的应用中,有很多错误是开发者无法控制的,例如用户输入了一个不合规定的值,或者需要打开的文件不存在。这些情况被称作“异常”,一个好的程序需要能处理可能发生的异常,避免程序因此而中断。

例如我们去打开一个文件:

  1. f = file('non-exist.txt')

  2. print 'File opened!'

  3. f.close()


复制代码
假如这个文件因为某种原因并没有出现在应该出现的文件夹里,程序就会报错:
  1. IOError: [Errno 2] No such file or directory: 'non-exist.txt'
复制代码
程序在出错处中断,后面的print不会被执行。

在python中,可以使用try...except语句来处理异常。做法是,把可能引发异常的语句放在try-块中,把处理异常的语句放在except-块中。

把刚才那段代码放入try...except中:
  1. try:

  2.    f = file('non-exist.txt')

  3.    print 'File opened!'

  4.    f.close()

  5. except:

  6.    print 'File not exists.'

  7. print 'Done'
复制代码
当程序在try内部打开文件引发异常时,会跳过try中剩下的代码,直接跳转到except中的语句处理异常。于是输出了“File not exists.”。如果文件被顺利打开,则会输出“File opened!”,而不会去执行except中的语句。

但无论如何,整个程序不会中断,最后的“Done”都会被输出。

在try...except语句中,try中引发的异常就像是扔出了一只飞盘,而except就是一只灵敏的狗,总能准确地接住飞盘。

#==== Crossin的编程教室 ====#
微信ID:crossincode
QQ群:312723402

面向零基础初学者的编程课
每天5分钟,轻松学编程

回复

使用道具 举报

0

主题

0

好友

36

积分

新手上路

Rank: 1

沙发
发表于 2015-3-14 16:42:50 |只看该作者
  1. #coding:utf-8
  2. try :
  3.                 f = file('xxcountScores.txt')
  4.                 print '打开文件成功'
  5. except:
  6.                 print '打开文件失败啦'

  7. print '我还是执行了!'
复制代码
回复

使用道具 举报

0

主题

0

好友

215

积分

中级会员

Rank: 3Rank: 3

板凳
发表于 2015-4-27 09:07:22 |只看该作者
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

地板
发表于 2016-1-3 17:41:36 |只看该作者
  1. try:
  2.     f=file(r'.\data file\non-exist.txt')
  3.     print 'File opened!'
  4.     f.close()
  5. except:
  6.     print 'File does not exist.'
  7. print 'Done!'
复制代码
回复

使用道具 举报

0

主题

0

好友

50

积分

注册会员

Rank: 2

5#
发表于 2016-2-22 15:44:55 |只看该作者
本帖最后由 那夏日 于 2016-2-22 15:49 编辑

先生你好!请问如果我用try的话 输入有误也会累计次数,如何解决!谢谢
  1. num=randint(1,100)
  2. times =0#记录本次游戏轮数
  3. print'猜下数,1-100'
  4. bingo=False
  5. while bingo ==False:
  6.     times+=1
  7.     try:
  8.         answer=input()
  9.         if answer<num:
  10.             print '小'
  11.         if answer>num:
  12.             print '大'
  13.         if answer==num:
  14.             print'对了'
  15.             bingo=True
  16.     except:
  17.         print'输入有误'
复制代码
回复

使用道具 举报

174

主题

45

好友

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2016-2-22 22:56:40 |只看该作者
那夏日 发表于 2016-2-22 15:44
先生你好!请问如果我用try的话 输入有误也会累计次数,如何解决!谢谢

把累计次数的代码放在try块的最后一句,输入成功了才计数
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-12-21 20:58 , Processed in 0.015156 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部