鱼C论坛

 找回密码
 立即注册
查看: 3878|回复: 23

Python异常

[复制链接]
发表于 2015-9-22 15:09:44 | 显示全部楼层 |阅读模式
50鱼币
怎样往外抛出一个异常呢?比如我让用户输入一个1,如果用户输入的不是1,就抛出一个异常,我目前只会捕获异常,不知道到能不能这样往外抛出一个异常

最佳答案

查看完整内容

看着代码图片简单讲一下,希望楼主能明白,我可是专门写的这个代码来讲下你的问题, 虽然不知道你说的抛出异常到底指什么,这里把自定义异常,捕捉异常,处理异常,抛出异常等等 笼统讲一下。可以自己复制代码运行一下! 01导入导入traceback模块 02定义一个名叫HahaError的异常类,必须得继承基类,继承Exception类(父类) 03我们将Exception类的默认的__init__()函数简单重写 04到07就不说了(self指针绑定) 09-10 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-22 23:22:43 | 显示全部楼层
本帖最后由 ~风介~ 于 2015-9-22 23:24 编辑

使用assert语句 —— 以下例子: 输入不是1时报错, 是1时通过。
  1. >>> assert input() == '1'
  2. 2
  3. Traceback (most recent call last):
  4.   File "<pyshell#1>", line 1, in <module>
  5.     assert input() == '1'
  6. AssertionError
  7. >>> assert input() == '1'
  8. 1
  9. >>>
  10. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 14:07:57 | 显示全部楼层
  1. import traceback
  2. class HahaError(Exception): #我们先自己定义一个异常,以Error结尾,继承Exception类
  3.     def __init__(self,name,score):
  4.         self.name = name
  5.         self.score = math.sqrt(score**3)#简单引入一个模块math,看math导入是否成功
  6.     def __str__(self,name,score):
  7.         return '%s的得分是:%d '%(self.name,self.score)

  8. try:
  9.     import sys.math #尝试通过sys导入math 模块,会出错,没有sys.math这个模块
  10. except:
  11.     import math #觉得可能会出错,解决办法,出错后换做直接导入math模块

  12. try:
  13.     tt = HahaError('Lily',8).__str__('Lily',8)
  14.     try:
  15.         print(tt)#不出错,会怎样呢?
  16.         int(tt)#肯定出错,又会怎样呢?
  17.         assert tt == 1#前面出错了,后面断言又再出错的话会不会执行呢?
  18.     except: TypeError,AssertionError,traceback.print_exc()
  19.     finally:print('我们继续')
  20.     try:
  21.         HahaError('LiMing',6)#都正确,再看看会发生什么!
  22.         mm = int(input('卧槽要输入?: '))#先输入整数让其正确试下,然后再次运行
  23.                                         #输入1.2小数让其错误看看会发生什么        
  24.     except ValueError as ppp:
  25.         print('错了吧: ',str(ppp))
  26.     finally: print('好吧!')
  27. except:TypeError,traceback.print_exc()
  28. else:
  29.     if int(input('输入: ')) != 1:
  30.         raise HahaError('Lily',8)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 14:18:36 | 显示全部楼层

我们分两次运行一下,上图代码!
999.png

第一次”卧槽要输入?"时输入整数2,ENTER后,进入else要求“输入”,输入3时,由于3不等于1,
所以抛出我自定义的HahaError
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-22 15:09:45 | 显示全部楼层
夕阳游龙 发表于 2015-9-27 14:18
我们分两次运行一下,上图代码!

333.png
看着代码图片简单讲一下,希望楼主能明白,我可是专门写的这个代码来讲下你的问题,
虽然不知道你说的抛出异常到底指什么,这里把自定义异常,捕捉异常,处理异常,抛出异常等等
笼统讲一下。可以自己复制代码运行一下!
01导入导入traceback模块
02定义一个名叫HahaError的异常类,必须得继承基类,继承Exception类(父类)
03我们将Exception类的默认的__init__()函数简单重写
04到07就不说了(self指针绑定)
09-10通过导入一个不存在的模块而导致异常
11-12用except来处理,保证math模块被正确导入
15我们尝试访问自定义的一个HahaError的异常类,是正确能访问的,try是正确的
16-19正确之后我们再来try三条语句,17正确,18错误,19错误
20我们通过except来处理17-19错误的语句,我们尝试捕获TypeError,AssertionError两类错误,
事实上没捕获到,因为int(tt)是ValueError,因而<class TypeError  None>,18出错了19直接
跳过去了,显示的错误是由traceback.print_exc()把信息显示出来的,所以20的TypeError,AssertionError
去掉只留except:traceback.print_exc()显示也是一样的
21的finally无论如何都会执行的
22再次try,23的话得到一个实例<class '__main__.HahaError'>也是正确的
24的话输入整数就正确如2都正确了直接跳过26-27的except
28finally执行
30进入else(没有错误才会执行,错的是不会执行,要注意错误出现的层)
31然后进行提示“输入”,如果输入不是1就会抛出(raise)我们自定义的一个HahaError!
输入是1的话不抛出!

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
哥斯拉不说话 + 1 + 1 明白了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 15:54:11 | 显示全部楼层
夕阳游龙 发表于 2015-9-27 14:18
我们分两次运行一下,上图代码!

注意:shell里面红字部分,第一个告诉说是ValueError,第二个是抛出的自定义异常:HahaError: <unprintable HahaError object>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-22 17:37:25 | 显示全部楼层
raise,具体可以help()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-22 18:32:47 | 显示全部楼层
抛出异常是什么意思呢?{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-23 10:53:04 | 显示全部楼层
同意楼上~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-23 13:04:09 | 显示全部楼层
视频里有具体用raise捕捉的例子啊,小甲鱼老师同样捕捉了错误并输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-23 16:25:47 | 显示全部楼层
看上面的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-23 19:55:54 | 显示全部楼层
我其实是来领鱼币的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-24 11:57:22 | 显示全部楼层
有raise抛出异常,用条件来判断是否有异常。楼主我好需要鱼:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-24 12:03:33 | 显示全部楼层
同意楼上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 08:08:59 | 显示全部楼层
本帖最后由 weisuoaaaaaa 于 2015-9-27 08:14 编辑

4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 08:10:02 | 显示全部楼层
0000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 08:11:14 | 显示全部楼层
111111111111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 08:14:32 | 显示全部楼层
11111111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 10:11:28 | 显示全部楼层
~风介~ 发表于 2015-9-22 23:22
使用assert语句 —— 以下例子: 输入不是1时报错, 是1时通过。

这个哥斯拉不说话的家伙明显只是靠悬赏来吸引眼球让别人回复,自己问题解决了,也不会标记的和选出最佳答案的!这是他打着悬赏又来问问题,完全的诚信问题!win32com [url]http://bbs.fishc.com/thread-65133-1-1.html (出处: 鱼C论坛)[/url]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 10:16:48 | 显示全部楼层
夕阳游龙 发表于 2015-9-27 10:11
这个哥斯拉不说话的家伙明显只是靠悬赏来吸引眼球让别人回复,自己问题解决了,也不会标记的和选出最佳答 ...

也许我错了,但至少你的回答完全符合他的问题答案,不知道他自己没说清楚还是怎么的,还是想具体知道其他他想知道的怎么的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 11:35:07 | 显示全部楼层
夕阳游龙 发表于 2015-9-27 10:11
这个哥斯拉不说话的家伙明显只是靠悬赏来吸引眼球让别人回复,自己问题解决了,也不会标记的和选出最佳答 ...

明显只是靠悬赏来吸引眼球让别人回复 —— 也不算吧,可能是他最近不常上论坛哩~
自己问题解决了,也不会标记的和选出最佳答案的 —— 等过了7天以后版主们就会替他选出最佳答案的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-27 14:06:41 | 显示全部楼层
~风介~ 发表于 2015-9-27 11:35
明显只是靠悬赏来吸引眼球让别人回复 —— 也不算吧,可能是他最近不常上论坛哩~
自己问题解决了,也不 ...

好吧!不知道他想知道什么,我自定义一个异常,然后把捕捉异常,抛出异常,以及Try-except-Finally-else等糅合在一个例子里来说明下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-25 18:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表