小编Cla*_*diu的帖子

从DrRacket读入命令行参数

如何在使用racket运行脚本时检测给定的命令行参数?也就是说,相当于Python中的sys.argv,Java中的args []等等......

command-line arguments racket

2
推荐指数
1
解决办法
1203
查看次数

模式:在功能退出时做一些优雅的方式?

我有一个逻辑函数,如下所示:

doStuff1()
try:
    doStuff2()
except type1:
    error1()
    return endstuff()
except type2:
    error2()
    return endstuff()
except:
    error3()
    return endstuff()

if doStuff3():
    error4()
    return endstuff()

doStuff4()
return endstuff()
Run Code Online (Sandbox Code Playgroud)

如您所见,endstuff()在函数的每个可能出口处完成.就像现在一样,endstuff()实际上是2行代码,我最近不得不在所有可能的退出中添加第三行代码.有没有更优雅的方式来组织这个代码?我不能只使用a finally,因为抛出异常的情况并非总是如此.

language-agnostic design-patterns coding-style

2
推荐指数
1
解决办法
157
查看次数

PostgreSQL函数迭代/处理许多行状态

我有一个数据库,其列如下:

session | order | atype | amt
--------+-------+-------+-----
1       |  0    | ADD   | 10
1       |  1    | ADD   | 20
1       |  2    | SET   | 35
1       |  3    | ADD   | 10
2       |  0    | SET   | 30
2       |  1    | ADD   | 20
2       |  2    | SET   | 55
Run Code Online (Sandbox Code Playgroud)

它代表了正在发生的行动.每个会话从0开始.ADD添加一个数量,而SET设置它.我想要一个函数来返回会话的结束值,例如

SELECT session_val(1); --returns 45
SELECT session_val(2); --returns 55
Run Code Online (Sandbox Code Playgroud)

是否可以编写这样的函数/查询?我不知道如何使用SQL进行任何类似迭代的事情,或者根本不可能.

sql postgresql

2
推荐指数
1
解决办法
9299
查看次数

为什么我在C中声明堆栈中的大型数组会出现段错误?

我从这行代码中得到了一个段错误:

int fatblob[1820][286][5];
Run Code Online (Sandbox Code Playgroud)

这是为什么?

c stack

2
推荐指数
2
解决办法
347
查看次数

扭曲:检查是否已经调用了延迟

这就是我正在努力实现的目标。我正在远程调用服务器以获取信息,我想阻止以等待信息。我创建了一个返回 Deferred 的函数,这样当 RPC 带着回复进来时,就会调用 deferred。然后我有一个从线程调用的函数threads.blockingCallFromThread(reactor, deferredfunc, args)

如果出现问题——例如,服务器出现故障——那么呼叫将永远不会解除阻塞。在这些情况下,我更喜欢延迟关闭,但有例外。

我部分成功了。我有一个延迟,onConnectionLost当连接丢失时它会消失。我将阻塞调用函数修改为:

    deferred = deferredfunc(args)
    self.onConnectionLost.addCallback(lambda _: deferred.errback(
        failure.Failure(Exception("connection lost while getting run"))))
    result = threads.blockingCallFromThread(
        reactor, lambda _: deferred, None)
    return result
Run Code Online (Sandbox Code Playgroud)

这工作正常。如果服务器宕机,则连接丢失,并触发 errback。但是,如果服务器没有关闭并且一切正常关闭,onConnectionLost仍然会被触发,并且这里的匿名回调尝试触发 errback,导致引发AlreadyCalled异常。

有没有什么巧妙的方法来检查延迟是否已经被解雇?我想避免将它包装在一个try/except块中,但如果这是唯一的方法,我总是可以求助于它。

python twisted deferred

2
推荐指数
1
解决办法
2692
查看次数

twisted:如何在reactor代码和线程代码之间优雅地进行通信?

我有一个客户端使用twisted连接到服务器.客户端有一个可能在后台执行操作的线程.当反应堆关闭时,我必须:

1) check if the thread is doing things
2) stop it if it is
Run Code Online (Sandbox Code Playgroud)

这是一种优雅的方式吗?我能做的最好的事情是:

def cleanup(self):
    isWorkingDF = defer.Deferred()
    doneDF = defer.Deferred()

    def checkIsWorking():
        res = self.stuff.isWorking() #blocking call
        reactor.callFromThread(isWorkingDF.callback, res)

    def shutdownOrNot(isWorking):
        if isWorking:
            #shutdown necessary, shutdown is also a blocking call
            def shutdown():
                self.stuff.shutdown()
                reactor.callFromThread(doneDF, None)
            reactor.callInThread(shutdown)                
        else:
            doneDF.callback(None) #no shutdown needed

    isWorkingDF.addCallback(shutdownOrNot)

    reactor.callInThread(checkIsWorking)

    return doneDF
Run Code Online (Sandbox Code Playgroud)

首先,我们检查它是否正常工作.该回调的结果rescallback是关闭或不关闭,然后触发doneDF,扭曲等待直到关闭.

相当混乱呃!有没有更好的办法?

也许一个相关的问题是,是否有更优雅的方式将回调链接到彼此?在完成后我可以看到自己需要做更多的清理代码,所以我必须做出一个不同的done延迟,并且当前doneDF激活一个回调,然后执行调用done延迟的调用.

python multithreading shutdown twisted

2
推荐指数
2
解决办法
2966
查看次数

twisted:如果来自回调的错误,则无异常跟踪

请考虑以下代码:

df = defer.Deferred()
def hah(_): raise ValueError("4")
df.addCallback(hah)
df.callback(hah)
Run Code Online (Sandbox Code Playgroud)

当它运行时,该异常就会被吃掉.它去了哪里?如何才能显示它?做defer.setDebugging(True)没有效果.

我问这个是因为其他时候,我得到一个打印输出"延迟时未处理的错误:".在这种情况下如何实现?我看到如果我添加一个errback df然后errback被异常调用,但我想要做的就是打印错误而不做任何其他事情,我不想手动将该处理程序添加到我创建的每个延迟.

python error-handling twisted deferred

2
推荐指数
1
解决办法
1168
查看次数

相当于Scheme在Ruby中的动态风

Ruby有延续......它有dynamic-windScheme这样的结构吗?

ruby scheme continuations

2
推荐指数
1
解决办法
331
查看次数

python mechanize - 提交自定义表单

我正在连接需要使用机械化登录的页面.它在首页上使用了一些javascript,使得机械化直接更难.我知道我必须提交什么形式才能登录 - 这个形式总是由js生成,每次都是一样的.如何设置机械化只需提交页面上没有的自定义表单?基本上相当于这个perl问题,但在Python中.

javascript python forms mechanize

2
推荐指数
1
解决办法
1278
查看次数

SendMessage用于将密钥直接发送到另一个窗口?

我正在尝试SendMessage将键盘输入发送到另一个窗口.我知道缺点,但我必须这样做,因为我必须发送几个键,我不能保证窗口将有焦点 - 所以当窗口没有焦点时这必须工作.

我正在通过尝试将密钥发送到记事本窗口来测试它.我尝试了以下变化,但没有一个有效:

def post_keys1(hwnd):
    win32api.SendMessage(
        hwnd, win32con.WM_KEYDOWN, ord('A'),
        0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
    win32api.SendMessage(
        hwnd, win32con.WM_CHAR, ord('A'),
        0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
    win32api.SendMessage(
        hwnd, win32con.WM_KEYUP, ord('A'),
        0 + (0 << 8) + (ord('A') << 16) + (0xC0 << 24))

def post_keys2(hwnd):
    win32api.PostMessage(
        hwnd, win32con.WM_KEYDOWN, ord('A'),
        0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
    win32api.PostMessage(
        hwnd, …
Run Code Online (Sandbox Code Playgroud)

python winapi input pywin32

2
推荐指数
1
解决办法
1万
查看次数