Я пытаюсь позвонить в библиотеку журнала C# из Python. Я хочу поддерживать комплексные объекты Python и словари из библиотеки C#. Я использую Pythonnet 3.0.5. < /P>
Когда я передаю словарь C#, код Python выглядит следующим образом: < /p>
import clr
clr.AddReference("Logging")
from Logging import *
logger = LogManager.Create(r"c:\path\to\log")
dictionary = { "Hey": "there", "All": "good" }
logger.Send[Object]("dict", dictionary)
< /code>
На стороне C# он получает python.runtime.pyobject в параметре System.object. Мой код конверсии в C# выглядит примерно так: < /p>
public LogItem Convert(object value, int recursionLimit)
{
if (recursionLimit < 0)
return null;
var list = new List();
var pyobj = value as Python.Runtime.PyObject;
if (pyobj != null && pyobj.IsIterable())
{
using var iter = pyobj.GetIterator();
while (iter.MoveNext())
{
var item = Convert(iter.Current, recursionLimit - 1);
if (item != null)
list.Add(item);
}
}
return new LogItem(
pyobj.ToString(Thread.CurrentThread.CurrentCulture),
list.ToArray());
}
< /code>
Когда я запускаю код Python, он дает мне следующее исключение: < /p>
Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at Python.Runtime.Runtime.PyObject_GetIter(BorrowReference op)
at Python.Runtime.PyIter.GetIter(PyObject iterable)
at ...Convert(Object value, Int32 recursionLimit)
...etc.
< /code>
Как я должен итерацию над словарем?foreach (var subobj in pyobj.Dir())
{
list.Add(Convert(subobj, recursionLimit - 1));
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... in-c-sharp
Как итерация через словарь Python в C# ⇐ C#
Место общения программистов C#
1759430045
Anonymous
Я пытаюсь позвонить в библиотеку журнала C# из Python. Я хочу поддерживать комплексные объекты Python и словари из библиотеки C#. Я использую Pythonnet 3.0.5. < /P>
Когда я передаю словарь C#, код Python выглядит следующим образом: < /p>
import clr
clr.AddReference("Logging")
from Logging import *
logger = LogManager.Create(r"c:\path\to\log")
dictionary = { "Hey": "there", "All": "good" }
logger.Send[Object]("dict", dictionary)
< /code>
На стороне C# он получает python.runtime.pyobject в параметре System.object. Мой код конверсии в C# выглядит примерно так: < /p>
public LogItem Convert(object value, int recursionLimit)
{
if (recursionLimit < 0)
return null;
var list = new List();
var pyobj = value as Python.Runtime.PyObject;
if (pyobj != null && pyobj.IsIterable())
{
using var iter = pyobj.GetIterator();
while (iter.MoveNext())
{
var item = Convert(iter.Current, recursionLimit - 1);
if (item != null)
list.Add(item);
}
}
return new LogItem(
pyobj.ToString(Thread.CurrentThread.CurrentCulture),
list.ToArray());
}
< /code>
Когда я запускаю код Python, он дает мне следующее исключение: < /p>
Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at Python.Runtime.Runtime.PyObject_GetIter(BorrowReference op)
at Python.Runtime.PyIter.GetIter(PyObject iterable)
at ...Convert(Object value, Int32 recursionLimit)
...etc.
< /code>
Как я должен итерацию над словарем?foreach (var subobj in pyobj.Dir())
{
list.Add(Convert(subobj, recursionLimit - 1));
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79781203/how-to-iterate-over-python-dictionary-in-c-sharp[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия