使用dynamic引发的异常:无法对 null 引用执行运行时绑定
今天上午运营反映有商户的账单没有生成。
查看日志,在批量生成账单服务执行过程中,因为如下异常而中断了:
跑批异常 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 无法对 null 引用执行运行时绑定
在 CallSite.Target(Closure , CallSite , Object )
在 System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
在 GateWay.BLL.Orders.PayFilesGenerator.Generate()

接下来看程序代码:
try
{
//查找distinct后的“商户&日期”
var map = orderDal.GetMerchantsForSettlement(_frDate, _toDate);
if (map == null)
{
_logHelper.WriteLog("no records");
return;
}
_logHelper.WriteLog("获取到{0}条“商户&日期”对儿", map.Count);
int i = ;
//遍历“商户&日期”集合,逐一查询出来订单然后生成文件
foreach (var p in map)
{
i++;
_logHelper.WriteLog("[{2}] 商户:{0}-文件日期:{1}", p.MerCode, p.Date.ToShortDateString(), i);
try
{
var isOK = Generate(p.MerCode, p.Date);
_logHelper.WriteLog("[{0}]生成文件返回{1}", i, isOK);
}
catch (Exception ex)
{
if (ex is ResponseErrorException)
{
_logHelper.WriteLog("[{0}]{1}", i, ex.Message);
}
else
{
_logHelper.WriteLog("[{0}]文件生成异常 {1}", i, ex.ToString());
}
}
}
}
catch (Exception ex)
{
_logHelper.WriteLog("跑批异常 {0}", ex.ToString());
}
39
_logHelper.WriteLog("本次批量生成账单文件结束.");
}
其中,GetMerchantsForSettlement方法的返回值是一个List<dynamic>
分析可知,异常一定是在第16行抛出的。
进一步分析,自然是调用p.Date的.ToShortDateString()方法出现这个异常了,也就是说这个集合里存在Date为null的项。
通过连接生产读库执行测试用例,验证了这一点。这个List<dynamic>里,果然有Date是空值的记录。Date来自于db里支付单记录表的支付时间,有一个商户的已支付完成的支付单的支付时间是null,从系统业务逻辑的角度来说,支付完成的订单一定要有支付时间的,否则会导致账单数据错误。
接下来,联系运维,执行update来修复这条记录的支付时间,然后重新跑账单,问题得以解决。当然,负责支付的伙伴得查查支付时间是null的原因并及时修复。
使用dynamic引发的异常:无法对 null 引用执行运行时绑定的更多相关文章
- Effective Java 第三版——70. 对可恢复条件使用检查异常,对编程错误使用运行时异常
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- java--何时处理Exception(哪一个层级),包装的基础类处理任务尽可能简洁,写入日志,检查null等运行时异常
1. 运行时异常和受检异常 2. 提前预防运行时异常.最常发生的是NPE,而检查NPE是程序员的基本职责.其他的,如除0等运行时异常的检查,需要程序员仔细检查,每个函数都得检查(除非可以确定不会有空指 ...
- java 检查抛出的异常是否是要捕获的检查性异常或运行时异常或错误
/** * Return whether the given throwable is a checked exception: * that is, neither a RuntimeExcepti ...
- Java中运行时异常和非运行时异常什么鬼?
Java中的异常分类 RuntimeException(也称unchecked exceptions,运行时异常) 就是我们在开发中测试功能时程序终止,控制台出现的异常.(一般来说,出现运行时异常基本 ...
- Exception、Error、运行时异常与一般异常有何异同
转自博客 https://blog.csdn.net/m0_37531231/article/details/79502778 一.开场白 对于程序运行过程中的可能出现异常情况,java语言使用一种 ...
- Java运行时异常和非运行时异常
1.Java异常机制 Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类.Java中的异常分为两大类:错误Error和异常Exception,Java ...
- Java运行时异常与一般异常以及错误的异同
Java提供了两类主要的异常:runtime exception和checked exception.checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常.对于这种异常,JAV ...
- Java中Error和Exception的异同以及运行时异常(Runtime exception)与检查型异常(checked exception)的区别
一:Error和Exception的基本概念: 首先Exception和Error都是继承于Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕 ...
- 运行时异常&编译时异常
/* 异常体系: --------| Throwable 所有错误或者异常的父类 --------------| Error(错误) --------------| Exception(异常) 异常一 ...
随机推荐
- BZOJ 1002 - 轮状病毒 - [基尔霍夫矩阵(待补)+高精度]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1002 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生 ...
- TensorRT 进行推理
- UIScrollView的一些关系
contentInsets和contentoffset以及contentSize 可见范围: contentSize + contentInsets 也就是(contentSize.width+con ...
- Boost 常用的库
boost是一系列C++模板库组成的免费,可移植,开源的程序库.网络上关于boost的文章已经很多. 这里摘记一些库的信息,供自己日后参考. 0.foreach - BOOST_FOREACH ...
- 适配ipad Pro
买了个新款ipad pro 11寸的,发现我们的ipad项目. 上下左右都有黑边 使用info.plist设置启动图,不用asset和launch storyboard 图片用如下格式命名,拖到项目中 ...
- LeetCode 784 Letter Case Permutation 解题报告
题目要求 Given a string S, we can transform every letter individually to be lowercase or uppercase to cr ...
- multiDex分包时指定主dex的class列表
在gradle中我们使用了如下代码可以将指定类型分配到主dex中: afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each ...
- Mongodb的下载和安装
下载 下载地址:http://dl.mongodb.org/dl/win32/x86_64 说明:zip是解压版的,msi是安装版的:安装过程中不知道什么原因3.6.x版本的安装会时等待时间很长并且 ...
- 前端 HTML body标签相关内容 常用标签 列表标签 ul,ol,li
列表标签 ul,ol,li ul.ol.li标签 都属于块级标签,独占一行 网站页面上一些列表相关的内容比如说物品列表.人名列表等等都可以使用列表标签来展示.通常后面跟<li>标签一起用, ...
- wamp3.1.0下载地址
WAMP是Windows用来搭建网站或服务器的开源软件,包含Apache + Mysql/MariaDB + Perl/PHP/Python等开发组件,方便快速便捷配置环境,很多朋友说wamp官网下载 ...