Python中raise问题求教

软件和网站开发以及相关技术探讨
回复
oneofthem
帖子: 13
注册时间: 2009-09-17 15:58

Python中raise问题求教

#1

帖子 oneofthem » 2010-01-23 20:36

使用raise引发异常的联系中,编码如下:
def fun(n):
if n==0:
raise 'Zero','n is zero'
else:
print n

try:
fun(0)
except 'Zero',data:
print data
else:
print 'used to testing RAISE function.'

调试时报错,提示信息如下:
Warning (from warnings module):
File "E:/Python files/test3.py", line 9
except 'Zero',data:
DeprecationWarning: catching of string exceptions is deprecated

Traceback (most recent call last):
File "E:/Python files/test3.py", line 8, in <module>
fun(0)
File "E:/Python files/test3.py", line 3, in fun
raise 'Zero','n is zero'
TypeError: exceptions must be classes or instances, not str

调试几次,都是报错,实在没办法,向各位请教了,谢谢大家。
oneofthem
帖子: 13
注册时间: 2009-09-17 15:58

Re: Python中raise问题求教

#2

帖子 oneofthem » 2010-01-24 23:02

各位路过的高人帮帮忙啊~
oneofthem
帖子: 13
注册时间: 2009-09-17 15:58

Re: Python中raise问题求教

#3

帖子 oneofthem » 2010-01-24 23:57

TypeError: exceptions must be classes or instances, not str
修改如下后,不报错,但是运行结果为空。
class f:
def fun(self,n):
if n==0:
raise 'Zero'
else:
print n
try:
f.fun(0)
except 'Zero':
print 'data'
else:
print 'used to testing RAISE function.'

希望高人早日出现指点一二
头像
anticlockwise
帖子: 2394
注册时间: 2007-03-01 20:46
来自: 湖南长沙

Re: Python中raise问题求教

#4

帖子 anticlockwise » 2010-01-25 19:21

错误已经说的很清楚了啊~~

TypeError: exceptions must be classes or instances, not str

代码: 全选

def fun(n):
    if n==0:
        raise ZeroDivisionError('n is zero')
    else:
        print n

try:
    fun(0)
    except ZeroDivisionError,data:
        print data
    else:
        print 'used to testing RAISE function.'
建议楼主看本更新一点的教材~~
oneofthem
帖子: 13
注册时间: 2009-09-17 15:58

Re: Python中raise问题求教

#5

帖子 oneofthem » 2010-01-25 23:14

anticlockwise,我按你的方法试了,没有出现那些错误了,但是用你的方法后还是不能正常运行。
提示说“except”无效,是“invalid syntax”。
但是怎么就无效了?想不通啊。。。。。。。。
我用的Python2.6,看的教材是针对Python2.5的
晕啊~菜鸟一个,希望大侠不吝赐教~拜谢~~~~~
附件
这是运行时的报错对话框……
这是运行时的报错对话框……
except.jpg (7.46 KiB) 查看 2661 次
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: Python中raise问题求教

#6

帖子 BigSnake.NET » 2010-01-25 23:27

无代码无真相。。。

python 有两个特点,一是升级很快,二是不向后兼容。。
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
oneofthem
帖子: 13
注册时间: 2009-09-17 15:58

Re: Python中raise问题求教

#7

帖子 oneofthem » 2010-01-25 23:35

代码就是LS的代码啊~~~~

代码: 全选

def fun(n):
    if n==0:
        raise ZeroDivisionError('n is zero')
    else:
        print n

try:
    fun(0)
    except ZeroDivisionError,data:
        print data
    else:
        print 'used to testing RAISE function.'
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: Python中raise问题求教

#8

帖子 BigSnake.NET » 2010-01-25 23:37

缩进不对。。。
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
oneofthem
帖子: 13
注册时间: 2009-09-17 15:58

Re: Python中raise问题求教

#9

帖子 oneofthem » 2010-01-25 23:48

:em06
顺利解决,菜鸟阶段,勿见笑~
多谢BigSnake.NET~~~~
头像
anticlockwise
帖子: 2394
注册时间: 2007-03-01 20:46
来自: 湖南长沙

Re: Python中raise问题求教

#10

帖子 anticlockwise » 2010-01-26 18:58

BigSnake.NET 写了:缩进不对。。。
感谢猫猫解围,HIAHIA~~
回复