使用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(异常) 异常一 ...
随机推荐
- Unable to cast object of type 'System.Int32' to type 'System.Array'.
x 入职了新公司.最近比较忙...一看博客...更新频率明显少了...罪过罪过... 新公司用ASP.NET MVC 遇上一个错误: Unable to cast object of type 'Sy ...
- 终于知道什么情况下需要实现.NET Core中的IOptions接口
自从接触 IOptions 之后,一直纠结这样的问题:自己定义的 Options 要不要实现 IOptions 接口. 微软有的项目中实现了,比如 Caching 中的 MemoryCacheOpti ...
- got positional argument after named arguments.原因
- MySQL的sql_mode模式说明及设置
MySQL的sql_mode模式说明及设置 MySQL的sql_mode合理设置 sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入 ...
- [No0000E8]C# 方法 参数传递
参数传递 当调用带有参数的方法时,您需要向方法传递参数.在 C# 中,有三种向方法传递参数的方式: 方式 描述 值参数 这种方式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值. ...
- hdu-6415 Rikka with Nash Equilibrium dp计数题
http://acm.hdu.edu.cn/showproblem.php?pid=6415 题意:将1~n*m填入一个n*m矩阵 问只有一个顶点的构造方案. 顶点的定义是:某数同时是本行本列的最大值 ...
- OpenGL基础探究
GLuint vertShader, fragShader; NSURL *vertShaderURL, *fragShaderURL; self.program = glCreateProgram( ...
- 转:JAVA中解决Filter过滤掉css,js,图片文件等问题
原文链接:https://www.cnblogs.com/ermeng/p/6440966.html public void doFilter(ServletRequest request, Serv ...
- 图->连通性->无向图的连通分量和生成树
文字描述 对无向图进行遍历时,对于连通图,仅需从图中任一顶点出发,进行深度优先搜索或广度优先搜索,便可访问到图中所有顶点.但对非连通图,则需从多个顶点出发搜索,每一次从一个新的起始点出发进行搜索过程得 ...
- Java+selenium 如何定位下拉框select
场景:需要进行下拉选择定位元素. 一.select菜单 select也是比较常见的,selenium封装了以下方法, 创建select WebElement selector = dr ...