Как я могу увидеть, какие исключения генерирует мой скрипт IronPython? - PullRequest
0 голосов
/ 24 сентября 2018

Я экспериментирую со встраиванием IronPython в проект Unity 3D, и у меня возникли некоторые ошибки, которые я не могу понять.

У меня есть следующий скрипт, присоединенный к GameObject в Unity.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using IronPython;
using IronPython.Modules;
using System.Text;

public class IronPythonWrapper : MonoBehaviour {

    void Start() {
        ScriptTest();
    }

    public static void ScriptTest() {
        // create the engine
        var engine = IronPython.Hosting.Python.CreateEngine();

        // and the scope (i.e. the Python namespace)
        var scope = engine.CreateScope();

        // execute the Python script
        engine.ExecuteFile("Assets/Scripts/ipscript.py");

        // grab the variable from the Python scope
        string commands = scope.GetVariable<string>("commands");
        Debug.Log(commands);
    }
}

Цель состоит в том, чтобы приведенный выше экземпляр движка IronPython выполнил следующий простой скрипт Python, называемый ipscript.py.

commands = "Script executed."

Когда я вхожу в режим игры (в Unity), я получаюследующая ошибка.

MissingMemberException: 'ScopeStorage' object has no attribute 'commands'

Кто-нибудь знает, что я должен исследовать, чтобы решить эту проблему?Возможно, мне нужно реализовать перехват ошибок, чтобы я мог видеть любые исключения, которые IronPython генерирует при выполнении скрипта Python?

1 Ответ

0 голосов
/ 24 сентября 2018

Ваше исполнение на python не проходит должным образом.Поэтому ваша переменная commands создается для временной области, которая отбрасывается после выполнения файла python, и явно созданная область не имеет представления о том, что такое commands.

Фрагмент должен читаться как

engine.ExecuteFile("Assets/Scripts/ipscript.py", scope);
...