Ich habe Probleme mit UI, die Benutzer einfachen Ausdruck der zugrunde liegenden Daten eingeben können, um einige angepasste Ausgabe mit IronPython zu erhalten.So erhalten Sie detaillierte Fehlerort (Zeichenstandort) in einem single line python Ausdruck
Was ich getan habe ...
using System;
using IronPython.Hosting;
namespace SimpleTest
{
class Program
{
static void Main(string[] args)
{
var engine = Python.CreateEngine();
var scope = engine.CreateScope();
scope.SetVariable("a", new Person("A", 18));
scope.SetVariable("b", new Person("B", 24));
object result = null;
try
{
//result = engine.Execute<object>("a.Age + b.Age", scope);
result = engine.Execute<object>("a.Age + b.Grade", scope);
}
catch (Exception e)
{
// Error Message : 'Person' object has no attribute 'Grade'
// TODO HOW TO GET Character Span Location?
Console.WriteLine(e);
}
Console.WriteLine("Result:{0}", result);
}
}
public class Person
{
public string Name { get; private set; }
public double Age { get; private set; }
public Person(string name, double age)
{
Name = name;
Age = age;
}
}
}
Wie Sie den Ausdruck in engine.Execute<object>
weitergegeben sehen kann, ist ungültig, weil es keine Grade
Stütze in der Klasse ist, so dass der Motor wirft Ausnahme wie erwartet, aber es nicht enthält Irgendwelche Informationen über den Ort des Charakters von Text, der dem Benutzer mit einer hervorragenden Farbe wie Rot angezeigt werden kann.
Irgendein Hinweis, das zu tun?
Ich googelte, aber keine Antwort dafür gefunden. Nur was ich gefunden habe, ist die Anzeige der Zeilennummer in den Dateinameninformationen.
Dank
Ich habe den gleichen Wert von 'offset' (?) 23, aber verstehe nicht, was die Bedeutung davon ist und wie man die exakte Zeichenspanne (Zeichenindexbereich der gegebenen Python-Ausdruckszeichenfolge) extrahiert. Gibt es noch einen Hinweis? – Joonhwan
Ehrlich gesagt, ich weiß nicht, was die 'Index'-Eigenschaft genau bedeuten könnte. Zuerst dachte ich, es sei nur der Offset in die Datei, dass die genaue Position auftritt. Zeilennummern können immer mithilfe von Compiler-Direktiven angepasst werden, sofern sie unterstützt werden. Ich habe keinen anderen Grund, etwas anderes zu glauben. –