2013-02-05 35 views
0

Python 2.7.3如何定義錯誤類?

當我爲像鸚鵡一樣的用戶運行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) 
+0

你可能要將此分成幾個問題 –

+0

更改'除了SillyWalkError:''到除了SillyWalk.SillyWalkError:'因爲該名稱已在該模塊的命名空間中定義。 – martineau

+0

@martineau:除'SillyWalk.SillyWalkError:'我擺脫了「undefined」錯誤,但是我得到了'File「c:\ python27 \ lib \ site-packages \ SillyWalkapi-1.4.2-py2.7。蛋\ SillyWalkapi \ __ init__.py」,線路278,在parse_etree 提高SillyWalkError(u'Error:%(代碼)S:%(MSG)S'%err.attrib)'錯誤 –

回答

1

NameError: name 'SillyWalkError' is not defined只是表示該名SillyWalkError沒有定義。它不是特定於異常處理或編寫異常類。

看起來你只是還沒有進口的名字SillyWalkError成正試圖捕獲異常的模塊;在沒有except的情況下得到的錯誤表明異常類本身工作正常。

+0

據我所知,沒有任何我可以導入。錯誤來自服務器。我認爲我必須爲我的最終結合錯誤定義。那是錯的嗎? –

+0

你需要在你的類'SillyWalkError' –

+0

延長'Exception' @DeinaUnderhill回溯清楚地表明,'文件「C:\ python27 \ LIB \站點包\ SillyWalkapi-1.4.2-py2.7.egg \ SillyWalkapi \ __init__.py「,第278行,在parse_etree中正在執行'raise SillyWalkError(u'Error:%(code)s:%(msg)s'%err.attrib)行。如果'SillyWalkError'不是在執行該行的範圍中定義的名稱,那麼無法做到這一點。通常情況下,異常類型需要在某個模塊的全局範圍中定義,因此可以將它們與其他類/函數/任何其他類一起導入,以便客戶端代碼可以捕獲該類型的異常。 – Ben

0

好吧,體育迷!

至少我對這個問題的第一個問題是我的許多金髮時刻之一的結果! blonde moments!

我用的except SillyWalk.SillyWalkError ...代替except SillyWalk***api***.SillyWalkError ...

謝謝大家誰幫助!

相關問題