2011-07-10 68 views
1

所以我有這樣的代碼,使用Weka中的Java API:秧雞的Java API stringtovector例外

String html = "blaaah"; 
    Attribute input = new Attribute("html",(FastVector) null); 

    FastVector inputVec = new FastVector(); 
    inputVec.addElement(input); 

    Instances htmlInst = new Instances("html",inputVec,1); 
    htmlInst.add(new Instance(1)); 
    htmlInst.instance(0).setValue(0, html); 

    System.out.println(htmlInst); 

StringToWordVector filter = new StringToWordVector(); 
filter.setInputFormat(htmlInst); 
Instances dataFiltered = Filter.useFilter(htmlInst, filter); 

,但是,filter.setInputFormat(htmlInst)線,Java的抱怨該函數拋出一個未處理的異常...

我做錯了什麼?

回答

2

當一個功能明確拋出一個異常,一兩件事情必須發生

  1. 調用函數必須處理try-catch塊中的例外
  2. 調用函數必須將異常拋出其調用者函數(因此,您必須選擇一些實際使用try-catch塊來處理異常的點)

根據這裏的文檔:http://www.lri.fr/~pierres/donn%E9es/save/these/weka-3-4/doc/weka/filters/unsupervised/attribute/StringToWordVector.html#setInputFormat(weka.core.Instances)這個函數拋出一個普通的舊的Exception。不是超級描述性的,但仍需要適當處理。

你可以這樣做:

try { 
    StringToWordVector filter = new StringToWordVector(); 
    filter.setInputFormat(htmlInst); 
    Instances dataFiltered = Filter.useFilter(htmlInst, filter); 
} catch (Exception e) { 
    System.err.println("Exception caught during formatting: " + e.getMessage()); 
    return; 
} 

如果你寧願有另一個函數處理異常,改變你的方法簽名明確地拋出異常:

private Object formatMyString(String s) throws Exception { 
    ... 
} 
0

你必須使用的情況下,任何一個try catch塊出錯:

try { 
     filter.setInputFormat(htmlInst); 
     Instances dataFiltered = Filter.useFilter(htmlInst, filter); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    }