概述
错误处理是不可或缺的,Jpype为了将java异常机制和python异常机制连接起来,提供了JException对象。在python使用该对象完成对java接口的异常捕获。
JException
所有 java.lang.Throwable 对象的基类。可以理解为这个对象代表所有java异常。类似puthon中的异常是直接或间接扩展 Exception 类。
- python中捕获Exception代表捕获所有异常。
- 同理,捕获Jpype的JException代表捕获java的所有异常。
JException对象的两个方法
JException().message()
# 返回异常中绑定的的消息JException().stacktrace()
# 返回包含java程序中异常堆栈的信息。
示例
java
public int test_Exception(int a, int b){
if(b == 0){
throw new ArithmeticException("异常:除数不能为0");
}
return a/b;
}
python
# 测试JPype异常机制
try:
res = myJpypeTest.test_Exception(2, 0)
except JException as e:
print("\n\n############## print(e) ######################")
print(e)
print("\n\n############## print(e.message) ######################")
print(e.message)
print("\n\n############## print(e.stacktrace()) ######################")
print(e.stacktrace())
"D:\Program Files\Python39\python.exe" D:/myProjects/python/test_JPype/main.py
############## print(e) ######################
java.lang.ArithmeticException: 异常:除数不能为0
############## print(e.message) ######################
<bound method JException.message of ArithmeticException('异常:除数不能为0')>
############## print(e.stacktrace()) ######################
java.lang.ArithmeticException: 异常:除数不能为0
at com.linchao.myJpypeTest.test_Exception(myJpypeTest.java:111)
代表java中报错代码在myJpypeTest.java文件第111行。
Process finished with exit code 0
Tips
你也可以在python中捕获具体的java异常
try:
res = myJpypeTest.test_Exception(2, 0)
except java.lang.ArithmeticException as e:
print("\n\n############## print(e) ######################")
print(e)
print("\n\n############## print(e.message) ######################")
print(e.message)
print("\n\n############## print(e.stacktrace()) ######################")
print(e.stacktrace())
"D:\Program Files\Python39\python.exe" D:/myProjects/python/test_JPype/main.py
############## print(e) ######################
java.lang.ArithmeticException: 异常:除数不能为0
############## print(e.message) ######################
<bound method JException.message of ArithmeticException('异常:除数不能为0')>
############## print(e.stacktrace()) ######################
java.lang.ArithmeticException: 异常:除数不能为0
at com.linchao.myJpypeTest.test_Exception(myJpypeTest.java:111)
Process finished with exit code 0
总结
本文描述了python调用java时,面对java异常的捕获机制。
通过JPype的JException对象完成java异常的捕获,并介绍了JException的两个方法,帮助我们进一步了解java异常的信息。