【问题标题】:Exit with error code from SPSS syntax使用 SPSS 语法中的错误代码退出
【发布时间】:2016-02-08 17:32:58
【问题描述】:

我正在使用一个批处理文件,它调用一个运行许多语法文件的 SPSS 生产作业。

在语法文件中我希望能够检查一些变量,如果某些条件不满足,那么我想停止生产作业,退出 SPSS 并将错误代码返回到批处理文件。

批处理文件需要根据返回的错误码停止运行下一个命令。我已经知道如何在批处理文件中执行此操作了。

最基本的解决方案是,如果错误代码不为 0,则停止,错误文本将从语法中输出到单独的文本文件。一个额外的错误代码将是一个不同的错误代码,然后我可以将其匹配到抛出代码的语法中的位置。

在 SPSS 语法和/或生产文件中实现此目的的最佳方法是什么?

【问题讨论】:

    标签: spss


    【解决方案1】:

    执行此操作的一种方法是将统计信息作为外部模式 Python 作业执行。然后,您可以查询任何结果,捕获异常,并根据需要设置退出代码和消息。这是一个例子:

    jobs.py:

    Python 作业

    导入系统
    sys.path.append(r"""c:/spss23/python/lib/site-packages""")
    导入spss

    尝试:
    spss.Submit("""INSERT FILE="c:/temp/syntax1.sps".""") 除了:
    打印“语法 1.spss 失败” 退出(代码=1)

    尝试:
    spss.Submit("""INSERT FILE="c:/temp/syntax2.sps".""")
    除了:
    打印“syntax1.spss 失败”
    退出(代码=2)

    那么bat文件就可以了
    python c:/myjobs/jobs.py
    打印 %ERRORLEVEL%

    或类似的。该作业需要使用 OMS 或 shell 重定向以适当的格式保存输出。 (try 和 except 后面的块要缩进。)

    【讨论】:

    • 那么 SPSS 语法如何抛出异常?
    • 如果提交的 SPSS 命令中存在严重程度为 3 或更高的错误,则会引发 Python 异常。 Sev 3 及以上意味着命令失败。级别 1 和 2 只是让命令完成的警告。如果您想要更好的控制,有一个用于获取错误级别的 api,但您需要逐个提交命令才能有用。
    • 不明白这如何回答我的问题?我希望 SPSS 抛出异常。我希望在 SPSS 语法中的某个地方,我可以有一个会产生错误的条件。
    • 如果 SPSS 语法有问题,Submit api 会出现异常。由于这里的顶级作业是 Python 代码,因此以非零错误代码退出 Python 将显示在 bat 文件的 %ERRORLEVEL% 中。因此,在执行 SPSS 代码时,链是错误的,会传播到控制 Python 代码,该代码以非零代码退出作业。 Python 代码可能会处理错误并继续,也可能会退出。
    • 仍然不认为你明白我的问题。 SPSS 代码中没有错误。 SPSS 代码工作正常。我想在某些情况下创建一个错误。例如 IF variable2 = 6 然后抛出错误并退出。为什么?因为我不希望 variable2 包含 6。同样,SPSS 语法很好。我想手动创建一个错误。
    【解决方案2】:

    在外部模式下,您可以使用这样的代码,也可以在查看器中查询项目。

    import spss, spssdata
    
    curs = spssdata.Spssdata("variable2")  
    for case in curs:  
        if case[0] == 6:  
            exit(99)  
    curs.CClose  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 2021-11-06
      • 2013-09-28
      • 2012-03-01
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多