python调用java之Jpype异常机制

概述

错误处理是不可或缺的,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异常的信息。

示例源码

https://github.com/linchao001/testJpype

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值