小编Jul*_*oux的帖子

处理异常后如何从上次尝试的指令继续执行帧?

我想NameError通过将所需的缺失变量注入到帧中来处理异常,然后从上一次尝试的指令继续执行.

以下伪代码应说明我的需求.

def function():
    return missing_var

try:
    print function()

except NameError:

    frame = inspect.trace()[-1][0]

    # inject missing variable
    frame.f_globals["missing_var"] = ...

    # continue frame execution from last attempted instruction
    exec frame.f_code from frame.f_lasti
Run Code Online (Sandbox Code Playgroud)

在repl.it上阅读整个unittest

笔记

背景

代码在从属进程中运行,该进程由父进程控制.任务(真正的功能)写在父级中,后者使用dill传递给从站.我希望一些任务(在slave进程中运行)尝试从父进程中的外部作用域访问变量,我希望slave能够动态地向父进程请求这些变量.

ps:我不希望这种魔法在生产环境中运行.

python

11
推荐指数
1
解决办法
210
查看次数

如何在不阻塞主线程的情况下使用Qt-Dbus绑定

我的目标是使用Qt的DBus绑定创建一个库.

我尝试创建一个Qt应用程序而不在主线程中启动QEventLoop(由QCoreApplication类提供).

这是一个简约的应用程序示例,使用QT-4.6.2版本正常工作但使用QT-4.8或更高版本阻止内省.

DBusHandler.hpp

#pragma once
#include <iostream>
#include <QtCore/QThread>
#include <QtCore/QtCore>
#include <QtDBus/QDBusInterface>

class DBusHandler : public QThread
{
    Q_OBJECT;

private:     
    void run(void)
    {
        QDBusConnection connection = QDBusConnection::sessionBus();

        connection.registerService("my.qdbus.example");
        connection.registerObject("/", this, QDBusConnection::ExportAllSlots);
        exec();
    }

public:
    DBusHandler(void) {}
    virtual ~DBusHandler(void) {}

    void stop(void)
    {
        QDBusConnection connection = QDBusConnection::sessionBus();

        connection.unregisterObject("/");
        connection.unregisterService("my.qdbus.example");
        connection.disconnectFromBus(connection.name());
        QThread::quit();
    }

public slots:
    void remoteCall(QByteArray message)
    {
        std::cout << "Message size: " << message.size() << std::endl;
    }
};
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "DBusHandler.hpp"

int …
Run Code Online (Sandbox Code Playgroud)

c++ qt dbus introspection qeventloop

9
推荐指数
1
解决办法
2605
查看次数

标签 统计

c++ ×1

dbus ×1

introspection ×1

python ×1

qeventloop ×1

qt ×1