2014-07-01 41 views
0

我無法返回zxJDBC錯誤(具體而言,由於網絡問題,我的連接似乎下降,這導致我的程序崩潰/掛起),但老實說,我不知道一個偉大的在Jython中處理返回.jar錯誤。在Jython當前的冒險之前,我的編程經驗大部分都被限制在Perl的BASH &之前。 我想要做的是返回所有zxJDBC錯誤,所以我可以識別&寫入try/except處理那些我可以處理的。在Jython或Sikuli中返回zxJDBC錯誤?

相關代碼如下:

########################################################## 
# from http://forum.java.sun.com/thread.jspa?threadID=300557 
# 
# Author: SG Langer Jan 2007 translated the above Java to this 
#  Jython class 
# Purpose: Allow runtime additions of new Class/jars either from 
#  local files or URL 
###################################################### 
class classPathHacker(object): 
import java.lang.reflect.Method 
import java.io.File 
import java.net.URL 
import java.net.URLClassLoader 
def addFile(self, s): 
    f = self.java.io.File(s) 
    u = f.toURL() 
    a = self.addURL(u) 
    return a 
def addURL(self, u): 
    sysloader = self.java.lang.ClassLoader.getSystemClassLoader() 
    sysclass = self.java.net.URLClassLoader 
    method = sysclass.getDeclaredMethod("addURL", [self.java.net.URL]) 
    a = method.setAccessible(1) 
    jar_a = jarray.array([u], self.java.lang.Object) 
    b = method.invoke(sysloader, [u]) 
    return u 

tmp = classPathHacker() 
tmp.addFile("/opt/sikuli/libs/mysql-connector-java-5.1.29-bin.jar") 
from com.ziclix.python.sql import zxJDBC 
db = zxJDBC.connect("jdbc:SERVER/DATABASE", "USER", "PASSWORD", "com.mysql.jdbc.Driver", CHARSET='iso_1') 
b = db.cursor() 
b.execute("SOME_SQL_CODE_GOES_HERE") 
for row in b: 
    data = str(row) 
    <DO IRRELEVANT THINGS WITH SQL RETURN> 
b.close() 
db.close() 

我將如何構建代碼捕獲錯誤/異常?

我懷疑有一些有價值的信息here爲誰知道足夠的Java將其轉換爲Jython的人。

回答

0

現在缺少的是在嘗試&除了通話

基於以上,具體的異常可能,如果需要的話可以叫出來,否則所有的異常可以退貨:

########################################################## 
# from http://forum.java.sun.com/thread.jspa?threadID=300557 
# 
# Author: SG Langer Jan 2007 translated the above Java to this 
#  Jython class 
# Purpose: Allow runtime additions of new Class/jars either from 
#  local files or URL 
###################################################### 
class classPathHacker(object): 
import java.lang.reflect.Method 
import java.io.File 
import java.net.URL 
import java.net.URLClassLoader 
def addFile(self, s): 
    f = self.java.io.File(s) 
    u = f.toURL() 
    a = self.addURL(u) 
    return a 
def addURL(self, u): 
    sysloader = self.java.lang.ClassLoader.getSystemClassLoader() 
    sysclass = self.java.net.URLClassLoader 
    method = sysclass.getDeclaredMethod("addURL", [self.java.net.URL]) 
    a = method.setAccessible(1) 
    jar_a = jarray.array([u], self.java.lang.Object) 
    b = method.invoke(sysloader, [u]) 
    return u 

tmp = classPathHacker() 
tmp.addFile("/opt/sikuli/libs/mysql-connector-java-5.1.29-bin.jar") 
from com.ziclix.python.sql import zxJDBC 
db = zxJDBC.connect("jdbc:SERVER/DATABASE", "USER", "PASSWORD", "com.mysql.jdbc.Driver", CHARSET='iso_1') 
try: 
    b = db.cursor() 
    b.execute("SOME_SQL_CODE_GOES_HERE") 
    for row in b: 
     data = str(row) 
     <DO IRRELEVANT THINGS WITH SQL RETURN> 
    b.close() 
    db.close() 
except: 
    print("%s - [ERROR] %s \n" % (datetime.datetime.fromtimestamp(time.time()).strftime('%m-%d-%Y 5H:%M:%S'), sys.exc_info()[1])) 

這導致錯誤打印看起來像「07-03-2014 12:10:39 - [錯誤]光標被關閉」,可以從那裏進一步調試。

根據Jython Exception Handling & Debugging的官方網頁獲得答案。

PS - 對不起,回答我自己的問題 - 不知道如果這是不好的juju做SO;但由於我找不到另一個類似問題的網頁,我以爲別人可能會喜歡這些信息。