您可以创建一段脚本,它可以工作一段时间,然后突然变为“您无法在空值表达式上调用方法”或“在该对象上找不到属性的属性名称”,验证属性是否存在并可以设置。“这是什么意思?您无法调用空值表达式的方法 - 一般
回答
这是“空指针异常”的Powershell版本。每次尝试查询显示为空的变量时都会出现此异常。要确定哪个变量是空的,哪里,你需要读取堆栈轨迹和该行中的行/符号号。举例:
You cannot call a method on a null-valued expression.
At E:\temp\testsest.ps1:35 char:12
+ If($Search.value() -contains $SearchString)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
让我们来解析错误信息。首先,在这个问题的标题中有一个措词。如果您要用这个措辞提出问题,您将得到一组由StackOverflow提出的类似问题。但是错误描述中有更多。第二行显示生成此异常的表达式的第一个字符的脚本,行和字符编号。在这里,请求$Search.value()
查询它是否为-contains $SearchString
。波浪下划线将表达全部分开,但正确的方式仅强调$Search.value()
。接下来,有一个CategoryInfo
和FullyQualifiedErrorId
,后者说“空值调用方法”,省略“指针”或“变量”。
现在,我们来调试消息。在这里,即将被调用的唯一方法是value()
,这意味着$Search
等于null。因此,我们需要从脚本的第35行开始向上寻找一个值,该值最后被分配给所讨论的变量。如果与搜索的字符串不匹配,此特定脚本对Range.Find()
的查询返回null。摘录如下:
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $true
$ExcelWorkBook = $Excel.Workbooks.Open($ExcelPath)
$ExcelWorkSheet = $Excel.WorkSheets.item("$location")
$Range = $ExcelWorkSheet.Range("A1").EntireColumn
$Search = $Range.find($user) # <<< here we get null
If($Search.value() -contains $user)
因此,我们发现我们在哪里收到null。
补救办法各不相同,但都包括对照$null
的支票。在这种情况下,检查$Search
为空就足够了,如果它确实为null,则返回“Nothing found”。这可能不是那么简单,可能有更多的结构可能为空,如在$a.b.c.someMethod()
中 - 此处为$a
,$a.b
或$a.b.c
为空,因此您需要检查所有结果。还有一种情况是,返回一个复杂的结构,并且预期在某个字段中具有值,但该字段未填充,因此尝试使用该字段的值会产生异常。
道德是:如果您收到一个关于“无效值”的例外说法,您并没有预料到返回null的情况,并且您必须在尝试之前添加对空值(或实际上任何意外)值的检查使用结果。
- 1. 一般使用方法LINQ表达式
- 2. 无法从另一个类方法调用正则表达式方法
- 3. 用“where”方法调用的表达式
- 4. QueryOver错误:在表达值无法识别方法调用
- 5. 嘲弄一般的方法调用
- 6. 我scprit“你不能叫一个空值表达式的方法”
- 7. 获取对方法调用者的引用的一般方法?
- 8. 从表达式调用方法
- 9. C# - 空VS “无法计算表达式”
- 10. 一般编程 - 调用非void方法但不使用值
- 11. 无法调用方法删除空
- 12. 获取无法调用空值的方法“getRange”
- 13. 调试:CXX0030表达式无法计算
- 14. 不管一般的方法将空值排序到底部?
- 15. 表达式树:调用一个方法与out或ref参数
- 16. 动态创建一个表达式调用方法EntityFunctions.DiffDays
- 17. 为什么Excel的“评估”方法是一般表达式评估器?
- 18. 无法调用空
- 19. 表达 - 无法识别的方法
- 20. Powershell调用静态方法内的表达式输出
- 21. 多方法的一般语法
- 22. 无法评估表达式
- 23. 表达式无法评估
- 24. 正则表达式方法
- 25. 当删除软件“你不能调用一个空值表达式的方法”错误
- 26. 数据为空。无法在空值上调用此方法或属性
- 27. 使用表达式的LINQ动态方法调用
- 28. 一般方法配置
- 29. 使Java方法一般
- 30. 在表达式树中调用实例方法的最佳方法?