2011-07-10 13 views
1

ので、私はウェカのJava APIを使用して、このコードがあります。WEKAの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

関数が明示的に例外をスローすると、2つのうちの1つが

  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

何かがうまくいかない場合は、あなたがしようとcatchブロックを使用する必要があります。

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