2012-01-26 106 views
0

如何測試我的參數,它是否會提高沒有實際提高它,使用tryexcept例外嗎?無效參數引發異常

class MyClass: 
    def function(parameter): 
     pass 

parameter是一個模糊的功能,其可以提高1個或多個的任何異常,例如:

parameter = pow("5", 5) 

TypeError作爲所述函數被調用,一旦上升,之前該函數可以執行其聲明。

+0

爲什麼你不想嘗試...除了?只是爲了好奇還是有其他原因嗎? – 2012-01-26 23:00:49

+0

對不起,如果我不清楚,我想使用'try'和'except',但我不知道它在參數中如何工作。 – 2012-01-26 23:02:48

+0

你的參數將會提升取決於你的功能是如何實現的。在你的例子中,我沒有看到'parameter'如何在'function'中引發一個異常。 – 2012-01-26 23:06:51

回答

0

在另一個答案你說的註釋:parameter是另一個功能;舉個例子:parameter = pow("5", 5)這引起了一個TypeError,但它可以是任何類型的功能,任何類型的異常「。

如果你想趕上你的函數裏面的exeption你要調用的paramenter(這我假設是可調用),該函數內部:

def function(callable, args=()): 
    try: 
     callable(*args) 
    except: 
     print('Ops!') 

例子:

​​

這是如果你真的需要在函數內調用你的「參數」。否則,你應該之外管理其行爲,可能與類似:

>>> try: 
...  param = pow('5', 5) 
... except: 
...  param = 10 
... 
>>> param 
10 
>>> function(param) 

在這個例子中,引發異常是powfunction,所以這是分開兩個不同的呼叫一個很好的做法,並與包try-except聲明可能失敗的代碼。

+0

如果'parameter'只是一個沒有任何參數的函數呢? – 2012-01-26 23:57:07

+0

@ChristopherM:如果'parameter'是一個不需要任何參數的函數,那麼只需調用'function(parameter)',因爲默認'args =()'。 – 2012-01-27 00:03:58

+0

好的,謝謝,我現在明白了。 – 2012-01-27 00:11:24

0

如果您預計參數爲某種類型,可以使用type(paramter) is parametertype

例如,如果你想覈實「我」是一個int,運行指令if(type(i) is int):

通過編輯:

try: 
    pow("5",5) 
    return 0 
except Exception, err: 
    sys.stderr.write('ERROR: %s\n' % str(err)) 
    return 1 
+0

我需要能夠計算'參數'引發的異常數量,而不用實際提高。 – 2012-01-26 23:03:44

+0

參數是什麼類型?或者它是你正在測試的錯誤拋出函數,而不是參數? – Zyerah 2012-01-26 23:04:59

+0

如果你在函數的開始處加入if(type(parameter)是int),如果它不是正確的類型則返回,那麼你的問題就解決了。如果我理解這個問題。 – Zyerah 2012-01-26 23:06:24

1

從我能理解,你要處理拋出的異常還要檢查進一步檢查出現了哪些錯誤?這是做到這一點的一種方式。現在

class Foo(object): 
    def find_errors(arg): 
     errors = [] 
     try: 
      # do something 
     except TypeError as e: 
      errors.append(e) 
      # handle exception somehow 
     except ValueError as e: 
      errors.append(e) 
      # handle exception somehow 
     # and so on ... 
     finally: 
      pass #something here 

     return errors, ans 

您可以檢查errors並找出異常已經提出。

0

也許你的意思是如何捕捉造成無效的函數調用TypeError異常?

像這樣:

def foo(bar): 
    pass 

foo(1, 2) 

你不抓住他們的功能,肯定不會在def foo(bar):線。

就這麼所以這是犯了一個錯誤的函數的呼叫者,你捕捉到了異常:

try: 
    foo(1, 2) 
except TypeError: 
    print('call failed')