我该如何定义一个错误类?

0 投票
2 回答
629 浏览
提问于 2025-04-17 14:47

我在使用 SillyWalk.getGroups(user_id = user) 这个命令时,遇到了一个错误,这个用户就像那只已经不在的鹦鹉一样。

Traceback (most recent call last):
    File "C:\Python\API\getgroups.py", line 32, in <module>
        Grp = SillyWalk.getGroups(user_id = user)
    File "c:\python27\lib\site-packages\SillyWalkapi-1.4.2-py2.7.egg\SillyWalkapi\__init__.py", line 349, in handler
        parse_format=args['format'], **args)
    File "c:\python27\lib\site-packages\SillyWalkapi-1.4.2-py2.7.egg\SillyWalkapi\__init__.py", line 435, in __wrap_in_parser
        return parser(self, data)
    File "c:\python27\lib\site-packages\SillyWalkapi-1.4.2-py2.7.egg\SillyWalkapi\__init__.py", line 278, in parse_etree
        raise SillyWalkError(u'Error: %(code)s: %(msg)s' % err.attrib)
SillyWalkError: Error: 1: User not found

为了解决这个问题,我尝试在代码中加了一个 try ... except 的语句:

try:
    Grp = SillyWalk.getGroups(user_id = user)
    g = 0
    for group in Grp.find('groups').findall('group'):
        g += 1
        u_ID  = user
        g_ID  = group.get('_ID')
        gName  = "" # group.get('name')
        HasParrot    = group.get('HasParrot')
        Priv   = group.get('Priv')
        Mbr    = group.get('members')
        threads = group.get('threads')

        tup = '{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\n'.format(u_ID, g_ID, gName.encode('utf-8'), HasParrot, Priv, Mbr, threads)
        OutFile.write(tup.encode('utf-8'))
except SillyWalkError:
    tup = '{0}\tNo Records Found\n'.format(u_ID)
    OutFile.write(tup.encode('utf-8'))

但是这样做后又出现了一个未定义的错误:

Traceback (most recent call last):
    File "C:\Python\API\getgroups.py", line 47, in <module>
        except SillyWalkError:
NameError: name 'SillyWalkError' is not defined
>>> 

这是我第一次尝试写一个异常类,所以能不能请大家教我怎么做? SillyWalk.getGroups 有十几个不同的错误代码,代表不同的错误原因。我需要为每一个错误都写一个处理方式吗?

我会永远感激你们的!(虽然你们可能不会从我这里得到任何东西,但我还是会心存感激!)

顺便问一下:在我查看脚本的内部时,有人能教我怎么解决我的 gName 问题吗?这样我就不需要把它设为空值了。它总是给我:

Traceback (most recent call last):
    File "C:\Python\API\getgroups.py", line 44, in <module>
        OutFile.write(tup.encode('utf-8'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 54: ordinal not in range(128)

2 个回答

0

好的,运动迷们!

我最开始对这个问题的困惑,真的是因为我脑袋一时转不过来! 脑袋转不过来!

我用的是 except SillyWalk.SillyWalkError ...,而应该用 except SillyWalk***api***.SillyWalkError ...

感谢所有帮助过我的人!

1

NameError: name 'SillyWalkError' is not defined 这个错误的意思是说,名字 SillyWalkError 没有被定义。这并不是说和处理异常或者写异常类有什么特别的关系。

看起来你只是没有把名字 SillyWalkError 导入到你想要捕捉这个异常的模块里;你之前没有用 except 的错误说明这个异常类本身是没问题的。

撰写回答