浅谈assert的几种用法


1.函数参数有效性检查

Example:

① def         SetScale(self, s):
                   assert     s > 0.0, s
                   self.model.scale = math3d.vector(s, s, s)


② def         SetTexture(self, textureName):
                   assert   textureName != ''
 

③ def         RotateToHorzDirection(self, dir):
                   dir.y = 0.0
                   assert   abs(dir) >= 1e-3, dir



2.函数返回值检查,检查函数执行是否有效

Example:

① def         OnModelLoaded(self, model):
              self.model = model
              self.rootbone = self.model.get_root_bone()
              assert self.rootbone >= 0



3.执行环境有效性检查

Example:

① def         showPrompt(utf8_msg):
             assert   _WorldProcInst.IM.IsActive()
            _WorldProcInst.IM.AddToChatBox(utf8_msg)


② def         BindSocket(self, socket,  o):
             assert self.model is not None
             self.model.bind(socket,o)


③ if msg_type == raidprotocol.RD_MSG_SCENE_FOG_PROPERTY_UPDATE:
              assert  self.scn is not None
              self.scn.set_fog(FogType, FogMode, FogColor, FogStart, FogEnd,FogDensity)


④ if msg_type == gsprotocol.GS_MSG_SIGN_OUT_RES_SUCCEEDED:
              assert   self._proc_state == self.PROC_STATE_NORMAL
             self._SwitchState(self.PROC_STATE_SIGN_OUT)
              returnFalse


⑤ def         __OnPickMember(self, obj):
              assert self.squad is not None
 


4.非法情况检查,非法逻辑分支

Example:

① def         ShowStall(self, bShow, type):
                     if       type == gsconsts.STALL_TYPE_COMMON:
                            self._stall_common=render.model('./meshes/items/sellbag.gim')
                     elif    type == gsconsts.STALL_TYPE_ADVANCE1:
                            self._stall_common=render.model('./meshes/items/tanwei01.gim')
                     else:
                            assert  0, 'unknown stall type'


② def         MainSubProc(self):
                    for v in [self.WorldGame,self.RaidGame, self.Farm.home]:
                           if v.IsActive():
                                  return v
                    
                    assert   0, 'should never come tohere'
                    return None


③ void  OnEvent(event,  args)
        {
              switch(event)
              {
              case EVENT0:
                  ...
              break;
              
              case EVENT1:
                  ...
              break;
              
              case EVENT2:
                  ...
              break;
              
               default:
                     assert    0 &&  "invalid event"
              }
       }



5.防止重入

Example:

① def       OnCharacterEnterAOI(self, char_aoi, pet_aoi):
              key = char_aoi.char_rtid
              assert   key not in self.aoiRemoteChar,  char_aoi.char_name


② def       AddBuffer(self, bufferRtid, typeID, srcRtID, life_Time=0.0,int_Mode=0, real_Mod=0.0):
              assert  bufferRtid not in  self.BufferMap


③ def        Initial(self, initChildProcName):
              global Instance
              assert Instance is None                        #全局共享数据写保护
              Instance = self
              return True



6.多个需要保持同步的变量一致性检查

Example:

1)       class       CString:
                def  __init__(self,s):
                       self._str = s
                       self._len= len(s)


               def  length(self):
                       assert  self._len == len(self._str)
                       returnself._len


               def  set(self,s):
                       self._str = s
                       self._len= len(s)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值