小编Pas*_*day的帖子

在Python中引发错误,排除堆栈跟踪中的最后一个级别

因此,我正在开发具有索引器的此类。我想抛出(或用Python语言来“提高”)一个IndexError异常。好吧,这很琐碎,

if errorCondition:
    raise IndexError("index out of range")
Run Code Online (Sandbox Code Playgroud)

但是,当此代码在控制台中运行并且发生错误时,堆栈跟踪还包括引发错误的行:

Traceback (most recent call last):
  File "code.py", line 261, in <module>
    print myCards[99]
  File "Full/Path/To/The/module.py", line 37, in __getitem__
    raise IndexError("item index out of range")
IndexError: item index out of range
Run Code Online (Sandbox Code Playgroud)

我觉得这很奇怪,我想向实现者隐藏类的内部工作原理,而不是提供有关从外部模块中提取文件,行和代码的信息。

有什么办法可以解决这个问题?引发错误的全部目的是提供足够的信息来描述函数调用出错的原因,而不是在外部代码内部引发错误的位置。

python debugging exception

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

使用Python + Flask的高效会话变量服务器端缓存

我正在使用Python + Flask开发我的第一个大型Web应用程序项目,并在规划基本级别体系结构的最佳实践中寻求建议。

我不打算重新发明轮子,所以我将使用Flask-login来处理登录管理,并使用Flask会话来处理最基本级别的会话变量,例如用户ID和自定义会话ID。

默认情况下,Flask会话基于cookie,并且基本上仅在客户端存在。但是,将需要一些将定期读取的会话变量(即用户权限,自定义应用程序配置),我感到很尴尬,无法在每个页面请求和响应中将所有这些信息都包含在cookie中。

由于可以通过在登录时引入唯一的会话ID在服务器端识别会话,因此可以使用某些服务器端会话变量管理。从数据库在服务器端读取此数据也感觉像是不必要的开销。

因此,我的问题是,如何在服务器端处理会话变量的最有效方法是什么?也许这可能是基于内存的解决方案,但是我担心不同的Flask应用程序请求可能会在不同的线程中执行,这些线程不会共享存储在内存中的会话数据,或者在同时读写的情况下导致冲突。

python session flask web

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

TypeScript 类型定义:如何声明类构造函数

我有一个自制的 JavaScript 库(一个 js 文件),其中包含许多类。为了在我的 TypeScript 项目中使用它,我创建了一个 d.ts 文件,其中包含所有这些类的类型定义。典型的定义如下:

export interface ClassExample {
  new(param: boolean): ClassExample;
  propertyName: number|string;
  log(...args: any[]): void;
}
Run Code Online (Sandbox Code Playgroud)

而且效果很好。但我受到了 linter 规则的打击@typescript-eslint/no-misused-new:“接口不能被构造,只能构造类”。当然,我可以配置我的 linter 和/或为特定d.ts文件添加例外,但这让我思考是否应该有其他方法来描述我的类。应该abstract class使用声明来代替吗?我尝试查找如何为公开可用的 Node.js 模块声明类构造函数,并在@types/node/console.d.ts文件中找到了以下代码:

interface ConsoleConstructor {
  prototype: Console;
  new(stdout: WritableStream, stderr?: WritableStream, ignoreErrors?: boolean): Console;
  new(options: ConsoleConstructorOptions): Console;
}
Run Code Online (Sandbox Code Playgroud)

所以,我想,如果 Node.js 的作者正在实践的话,在接口中声明类构造函数并不是一个严重的罪过?

javascript node.js typescript

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

处理图像以查找外部轮廓

我有数百个PNG图像,我必须生成相应的黑白图像,显示对象的外部轮廓.源PNG图像具有alpha通道,因此图像的"无对象"部分是100%透明的.

棘手的部分是,如果物体上有洞,则不应在轮廓中看到那些洞.因此,如果源图像是例如甜甜圈,则相应的轮廓图像将是锯齿状的圆形线,中间没有同心的较小线.

这是一个示例图像,源及其轮廓: 在此输入图像描述

是否有可以执行此操作的库或命令行工具?理想情况下,可以从Python中使用的东西.

python image-processing

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

获取 svg 元素的全局变换矩阵

我想使用浏览器 svg+JavaScript 从用户准备的 svg 模板(例如,在 Inkscape 中创建)生成动态图像,其中有矩形占位符标记应放置动态图形的位置。

理想情况下,用户 - 模板创建者 - 应该被允许以任何他们想要的方式移动、缩放、旋转、倾斜矩形(倾斜后没有那么多的矩形)。他们唯一要做的就是为那些占位符矩形设置正确的 id 值。

我正在寻找一种如何获取/计算这些占位符的变换矩阵的方法。由于它们可以嵌套在组中,因此仅读取元素的属性是不够的。

javascript svg

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

将 virtualenvs 移动到另一个主机文件夹

WORKON_HOME由于错误,我忘记在创建虚拟环境之前指定变量,并且它们是在/root/.virtualenvs目录中创建的。它们工作得很好,我通过激活某些环境进行了一些测试,然后查看(env)$ pip freeze那里安装了哪些特定模块。

因此,当我发现工作主路径错误时,我需要将主机目录更改为/usr/local/pythonenv. /root/.virtualenvs我创建了它并将目录的所有内容移动到/usr/local/pythonenv,并更改了变量的值WORKON_HOME。现在,使用 workon 命令激活环境似乎工作正常(即,promt 更改为(env)$),但是如果我这样做(env)$ pip freeze,我会得到比以前更长的模块列表,并且这些模块不包括移动之前安装在该特定环境中的模块。

我想仅仅移动文件并为WORKON_HOME变量指定另一个目录是不够的。是否有一些配置可以在其中指定主机目录的新位置,或者特定环境的一些配置文件?

python virtualenv virtualenvwrapper

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

多处理进程中的共享状态

请考虑这段代码:

import time
from multiprocessing import Process

class Host(object):
    def __init__(self):
        self.id = None
    def callback(self):
        print "self.id = %s" % self.id
    def bind(self, event_source):
        event_source.callback = self.callback

class Event(object):
    def __init__(self):
        self.callback = None
    def trigger(self):
        self.callback()

h = Host()
h.id = "A"
e = Event()
h.bind(e)
e.trigger()

def delayed_trigger(f, delay):
    time.sleep(delay)
    f()

p = Process(target = delayed_trigger, args = (e.trigger, 3,))
p.start()

h.id = "B"
e.trigger()
Run Code Online (Sandbox Code Playgroud)

这给出了输出

self.id = A
self.id = B
self.id = A
Run Code Online (Sandbox Code Playgroud)

然而,我希望它能给

self.id …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

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

部署linux CUDA应用程序

我使用NVIDIA CUDA 5工具包在我的笔记本电脑上编译了一个cu程序.一个非常基本的接口,仅使用终端输出.然后我继续测试它在我的台式PC上运行的方式(两者都安装了Ubuntu 12.04 LTS).

在桌面PC上我收到此错误消息:

加载共享库时出错:libcudart.so.5.0:无法打开共享对象文件:没有这样的文件或目录

好的,我明白了,有些lib没有安装.但是我真的需要在每台我想要编译代码的PC上安装CUDA工具包吗?

deployment cuda nvidia

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