【问题标题】:You cannot call a method on a null-valued expression - general您不能在空值表达式上调用方法 - 一般
【发布时间】:2015-07-10 07:43:30
【问题描述】:

您创建了一个脚本,它工作了一段时间,然后突然开始崩溃,并显示“您无法在空值表达式上调用方法”或“在此对象上找不到属性‘属性名称’ . 验证该属性是否存在并且可以设置。”。这是什么意思?

【问题讨论】:

    标签: powershell nullpointerexception null


    【解决方案1】:

    这是“空指针异常”的 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() 下划线。接下来是CategoryInfoFullyQualifiedErrorId,后者表示“Invoke method on null”,省略“pointer”或“variable”。

    现在,让我们调试消息。在这里,即将调用的唯一方法是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 的检查。在这种情况下,检查$Search 是否为空就足够了,如果它确实为空,则返回“Nothing found”。它可能没有那么简单,可能还有更多可以为空的结构,例如$a.b.c.someMethod() - 这里$a$a.b$a.b.c 为空,因此您需要检查所有结果。还有一些情况是返回一个复杂的结构,并且期望在某个字段中有一个值,但是该字段没有被填充,因此尝试使用该字段的值会产生异常。

    寓意是:如果您收到有关“null-valued”的异常,您并没有期望返回 null,您必须在尝试之前添加对 null(或者,实际上是任何意外)值的检查使用结果。

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      相关资源
      最近更新 更多