小编Sch*_*ote的帖子

长期异常链的优雅替代品?

很多时候我发现自己写的东西看起来像这样:

try:
    procedure_a()
except WrongProcedureError:
    try:
        procedure_b()
    except WrongProcedureError:
        try:
            procedure_c()
        except WrongProcedureError:
            give_up()
Run Code Online (Sandbox Code Playgroud)

这很可怕.是否有更优雅的方式来实现这种"尝试直到一个不例外"的逻辑?看起来这种事情会出现很多; 我希望有一些语言功能,我不知道这是为这个确切的东西设计的.

python

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

Bizzare"试图在Lua中调用一个表值"

以下代码段:

for weight, item in itemlist do
    weight_total=weight_total+weight
end
Run Code Online (Sandbox Code Playgroud)

在该代码段的第一行导致错误"尝试调用表值".为什么?

Itemlist是权重和字符串表的表,如下所示:

local itemlist = {
                        {4,"weapon_pistol"},
                        {2,"weapon_357"},
                        ...
Run Code Online (Sandbox Code Playgroud)

据我所知,没有任何东西被称呼; 为什么会出现这个错误?

lua for-loop runtime-error next garrys-mod

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

预增量运算符在C中的作用是什么?

在C及其许多衍生产品中,i++增量i并计算增值i前的值,并++i递增i并计算增值i 的值.

我可以看到特定增量运算符的推理; 当时许多处理器都有一个比添加更快的特殊增量操作码,而概念上"增量"与"添加"是一个不同的概念,理论上它们的编写方式可能会使代码更具可读性.

我不明白的是需要预增量运算符.不能用它写任何实际用途吗?

#This...
x = i++;
#becomes this:
x = i; 
++i;
Run Code Online (Sandbox Code Playgroud)

可能有一个我不知道的历史原因吗?你是否无法"抛弃"原始版本的C中运算符的返回值?

c c++ language-design

7
推荐指数
1
解决办法
702
查看次数

与传送器的寻路

我正在开发一个带有虚拟机器人的项目(计算机工艺模块中的Turtles for Minecraft),机器人将处于迷宫般的隧道中并且必须在其中导航.世界很方便地已经分为瓦片(它们的2D笛卡尔图,每个都有一个布尔可通过/不可通过的值),构建隧道的机器人将在他去的时候映射它们.

此外,在机器人需要快速进入的区域内散布着传送器"快捷方式".

问题是:让机器人找到目的地的最佳途径是什么?系统如何识别需要传送器的区域?A*是最着名的算法,但还有其他更适合应用程序的算法吗?请记住,我对寻路算法的经验很少,因此您可能需要将其分解为基本术语,以便我理解.有什么建议?

algorithm robotics path-finding cartesian

5
推荐指数
1
解决办法
1373
查看次数

在运行时修改循环函数的内部

这个是一个很糟糕的,但请耐心等待.

我正在调用一个具有无限期等待某种输入的函数的库.不幸的是,这个函数以这样的方式被窃听:它允许它从中读取的管道填充不相关的输入,导致程序在等待它自己失明的输入时锁定.该库完全是关键的,非常难以复制,维护者不接受拉取请求或错误报告.

我需要在这个函数的主体中注入一个"flush the pipe"函数调用.以前我通过利用具有回调参数的类似函数来解决这个问题,但是这个特定的函数没有这样的参数.

我能做什么?

python python-3.x

5
推荐指数
1
解决办法
48
查看次数

cx_Freeze 无法包含 Cython .pyx 模块

我有一个 Python 应用程序,我最近在其中添加了一个 Cython 模块。使用 pyximport 从脚本运行它工作正常,但我还需要一个我用 cx_Freeze 构建的可执行版本。

问题是,尝试构建它给了我一个可执行文件,该可执行文件在尝试导入 .pyx 模块时引发了 ImportError。

我修改了我的setup.py喜欢,看看我是否可以先编译 .pyx 以便 cx_Freeze 可以成功打包它:

from cx_Freeze import setup, Executable
from Cython.Build import cythonize


setup(name='projectname',
      version='0.0',
      description=' ',
      options={"build_exe": {"packages":["pygame","fx"]},'build_ext': {'compiler': 'mingw32'}},
      ext_modules=cythonize("fx.pyx"),
      executables=[Executable('main.py',targetName="myproject.exe",base = "Win32GUI")],
      requires=['pygcurse','pyperclip','rsa','dill','numpy']
      )
Run Code Online (Sandbox Code Playgroud)

...但是所有给我的都是No module named fx在构建时的 cx_Freeze 中。

我如何使这项工作?

python cython cx-freeze python-3.x

5
推荐指数
1
解决办法
1118
查看次数

无法配置Python 3.5以在Windows上使用Visual C++编译器

当我使用Python 3.4时,我使用MinGW来编译模块.不幸的是,3.5 MinGW支持不再有效.我已经安装了正确的Visual C++,但pip仍尝试使用MinGW编译器并失败.

如何告诉它使用正确的编译器?

python windows configuration python-3.5

5
推荐指数
1
解决办法
377
查看次数

当您丢失对 Python 线程的所有引用时会发生什么?

长话短说......当对一个threading.Thread对象的所有引用都丢失时会发生什么,例如在这个函数中:

def myfunc():
    def thread_func():
        while True:
            do_useful_things()
    thethread = threading.Thread(target = thread_func)
    thethread.run()
    return
Run Code Online (Sandbox Code Playgroud)

看起来线程一直在运行,但它的行为很奇怪,我想知道是否会发生奇怪的事情,因为垃圾收集器不正确地删除了它或其他什么。

或者即使生成线程本身没有主动跟踪它们,线程是否会正常继续(我知道threading它自己有获取活动线程的方法)?

python multithreading python-3.x

5
推荐指数
1
解决办法
338
查看次数

应用于iterable的每个元素的布尔语句上的分支

是否有一种Pythonic方式可以说"这个迭代中的任何元素都是如此"吗?或者,换句话说,是否有一个更清洁的版本:

if [True for x in mylist if my_condition(x)]:
    ...
Run Code Online (Sandbox Code Playgroud)

python conventions list python-3.x

4
推荐指数
1
解决办法
42
查看次数

multiprocessing.Pool.map_async 似乎没有...做任何事情?

所以,我正在开发一个应用程序,每次启动时都必须根据哈希列表检查 ~50 GB 的数据。显然这需要并行化,我不希望应用程序在“加载...”屏幕上挂一分半钟。

我正在使用multiprocessing.Pool'smap_async来处理这个问题;主线程调用map_async(checkfiles, path_hash_pairs, callback)并提供一个回调,告诉它在发现不匹配时发出警告。

问题是……什么都没发生。使用我的任务管理器查看 Python 进程显示它们生成然后立即终止而不做任何工作。他们从不打印任何东西,当然也永远不会完成并调用回调。

这个缩小的例子也表现出同样的问题:

def printme(x):
    time.sleep(1)
    print(x)
    return x**2

if __name__ == "__main__":
    l = list(range(0,512))

    def print_result(res):
        print(res)

    with multiprocessing.Pool() as p:
        p.map_async(printme, l, callback=print_result)
    p.join()
    time.sleep(10)
Run Code Online (Sandbox Code Playgroud)

运行它,然后......没有任何反应。交换map_asyncmap工程完全按照预期。

我只是犯了一个愚蠢的错误还是什么?

python python-multiprocessing

3
推荐指数
1
解决办法
2522
查看次数