Использование оператора try-exc с функцией signal.pause ()

Это на самом деле происходит потому, что сложные объекты - это то, что заставляет результирующий json-объект терпеть неудачу. И это терпит неудачу, потому что, когда объект отображается, он отображает детей, который отображает их родителей, делая круговую ссылку. Json потребовал бы бесконечного времени для его сериализации, поэтому он предотвращает проблему с исключением.

Отображение структуры Entity Framework также приводит к такому же поведению, и решение состоит в том, чтобы отбросить все нежелательные свойства.

Просто объясняя окончательный ответ, весь код будет выглядеть следующим образом:

public JsonResult getJson()
{
    DataContext db = new DataContext ();

    return this.Json(
           new {
                Result = (from obj in db.Things select new {Id = obj.Id, Name = obj.Name})
               }
           , JsonRequestBehavior.AllowGet
           );
}

Он также может быть следующим, если вы не хотите, чтобы объекты внутри свойства Result:

public JsonResult getJson()
{
    DataContext db = new DataContext ();

    return this.Json(
           (from obj in db.Things select new {Id = obj.Id, Name = obj.Name})
           , JsonRequestBehavior.AllowGet
           );
}
0
задан Viktor 17 January 2019 в 14:18
поделиться

2 ответа

Попробуйте сделать что-то вроде этого,

from signal import pause
from gpiozero import Button

class pressException( Exception ):
    pass

def raisePressException():
    raise pressException( 'Button held' )

try:
    push = Button( 5 )
    push.when_held = raisePressException()
    pause()
except pressException:
    print( 'Exception accepted' )

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

0
ответ дан Vinay Bharadhwaj 17 January 2019 в 14:18
поделиться

, которые поднимаются из этой линии

raise pressException( 'Button held' )

, так что вы должны заключить в try ... except правую линию, ту или уровень вверх, где вы запускаете liftPressException

, кстати, это не имеет смысла:

def raisePressException():
    raise pressException( 'Button held' )
    push = Button( 5 )        # not able to be reached or achieved.
    push.when_held = raisePressException

просто использовать

    raise pressException( 'Button held' )
0
ответ дан Sławomir Lenart 17 January 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: