每日分享
If you fear failure, you will never go anywhere.
如果你害怕失败,你将无法到达任何地方。
小闫语录:
一件事情的难与易,除了事情本身涉及知识复杂与否外,最大程度取决于对待它的态度。如果心生胆怯,必定失败。
RPC
1.消息协议实现思路与divide调用参数确定
为了填上篇文章的坑,我们来实现一个二进制消息协议的小案例。这个案例要实现的是一个RPC的服务接口定义,这个RPC调用可以完成除法的操作。
首先我们看一下本地调用,这个大家都明白,所以直接上代码。
1.写一个除法的函数:
def divide(num1,num2): """ 除法 :param num1: int :param num2: int :return: float """ val = num1 / num2 return val
2.在进行除法运算的时候,有可能会有异常情况,所以我们将异常定义一下。
考虑到num2可能为0的情况,我们此处自己定义异常。
class InvalidOpreation(Exception): def __init__(self, message=None): self.message = message or 'invalid operation'
整体代码实现:
-
注意:此代码只作为说明。
1. class InvalidOpreation(Exception): 2. def __init__(self, message=None): 3. # 异常信息如果有指定则按指定输出,没有的话则输出`invalid operation` 4. self.message = message or 'invalid operation' 5. 6. 7. def divide(num1, num2=1): 8. """ 9. 除法 10. :param num1: int 11. :param num2: int 12. :return: float 13. """ 14. # 增加判断操作,抛出自定义异常 15. if num2 == 0: 16. raise InvalidOpreation() 17. val = num1 / num2 18. return val 19. 20. try: 21. a = divide(200,0) 22. except InvalidOpreation as e: 23. print(e.message) 24. else: 25. print(a) divide消息协议:divide方法中,第一个参数为int类型num1,第二个参数为int类型num2,以一种伪代码的形式描述一下: 1. float <= divide(1: int num1, 2: int num2=1) => InvalidOpreation 2. # 执行成功为左边float类型,执行失败为右边InvalidOpreation