小编Kar*_*rus的帖子

Python:获取WindowsError而不是IOError

我试图在Windows 8上使用Python 2.7.6来理解异常.

这是我正在测试的代码,它旨在创建一个新目录My_New_Dir.如果目录已存在,我想删除整个目录及其内容,然后创建一个新目录.

import os

dir = 'My_New_Dir'
try:
    os.mkdir(dir)
except IOError as e:
    print 'exception thrown'
    shutil.rmtree(dir)
    os.mkdir(dir)
Run Code Online (Sandbox Code Playgroud)

问题是,永远不会抛出异常.如果目录不存在,代码工作正常,但如果目录确实存在,那么我得到错误:

WindowsError:[错误183]当该文件已存在时无法创建文件:'My_New_Dir'

但是根据os.mkdir()的Python文档,

如果该目录已存在,则引发OSError.

那么为什么抛出Windows错误而不是Python异常呢?

python windows exception-handling

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

如何获取由其完整路径指定的文件的父文件夹的名称?

在Matlab中,我有一个包含文件路径的字符串:

path = 'C:/Data/Matlab/Dir/file.m'
Run Code Online (Sandbox Code Playgroud)

我现在想要提取Dir字符串的' '部分.一种方法是:

[first, second, third, fourth, fifth] = strtok(path, '/')
Run Code Online (Sandbox Code Playgroud)

然后取出fourth元素,最后从中删除第一个字符(the /).

我只是想知道是否有更优雅的解决方案?显式存储所有first... fifth元素然后手动删除它似乎有点麻烦/.

谢谢.

matlab string-parsing

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

cmake在哪里寻找包裹?

Ubuntu 14.04,我正在编译一个C++程序,它取决于以下包:CUDAOpenNI.在CMakeListst.txt该程序的文件中,有以下内容:

find_package(CUDA)
find_package(OpenNI)
Run Code Online (Sandbox Code Playgroud)

输出到cmake:

Found CUDA: /usr/local/cuda (found version "6.5") 
-- Could NOT find OpenNI (missing:  OpenNI_LIBRARY OpenNI_INCLUDE_DIR)
Run Code Online (Sandbox Code Playgroud)

所以,它似乎CUDA被发现了,但事实OpenNI并非如此.现在,我已经安装了OpenNI,但可能不在标准位置.虽然CUDA文件是usr/local/cuda如上所述,但我的OpenNI文件是在~/Libraries/OpenNI.

我的问题是:如何判断cmake在哪里定义OpenNI_LIBRARYOpenNI_INCLUDE_DIR变量?是否存在某个文件,其中cmake包含为所有这些变量定义的路径,我可能需要手动编辑?

c++ ubuntu cmake

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

Cmake选项默认值

如果我有一个 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 2.8)

OPTION(FOO "Foo Option" OFF)

MESSAGE("FOO? " ${FOO})
Run Code Online (Sandbox Code Playgroud)

然后我调用 cmake ,得到以下输出:

FOO? ON
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我不是已经指定 FOO 的默认值是 OFF 了吗?

cmake

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

默认参数为非静态成员变量

我想创建一个类,它有两个整数成员变量,以及一个有两个可选参数的函数.如果提供了这些参数,则函数返回它们的总和; 如果未提供这些参数,则该函数返回其两个成员变量的总和.

这是代码:

class Foo
{
private:
    int x_;
    int y_;
public:
    Foo(int x, int y) : x_(x), y_(y){}
    int Bar(int a = x_, int b = y_)
    {
        int z = a + b;
        return z;
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下编译错误:

invalid use of non-static data member 'Foo::x_'
int x_;
    ^
invalid use of non-static data member 'Foo::y_'
int y_;
    ^
Run Code Online (Sandbox Code Playgroud)

这表明成员变量必须是静态的,才能将它们用作函数中的默认参数.但我不希望它们是静态的......

解决办法是什么?

c++

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

为Matplotlib imshow()手动定义的轴标签

以下代码:

import matplotlib.pyplot as plt
import numpy as np

data = np.random.randint(0, 100, size=(10, 10))
plt.imshow(data, cmap='jet', interpolation='nearest')
plt.show()
Run Code Online (Sandbox Code Playgroud)

给出下图:

在此输入图像描述

但是,我想手动定义它们,而不是与数组中的索引对应的轴标签.例如,如上所述,轴标签不是(0,2,4,6,8),而是希望它们为(0,10,20,30 ......).

这是我为此尝试的代码:

import matplotlib.pyplot as plt
import numpy as np

data = np.random.randint(0, 100, size=(10, 10))
labels = range(0, 100, 10)
plt.imshow(data, cmap='jet', interpolation='nearest')
plt.xticks(labels)
plt.yticks(labels)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,这给出了下图:

在此输入图像描述

我怎样才能获得一个像第一个一样的外观的数字,但是像第二个那样的轴标签?

python matplotlib

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

将逗号分隔的字符串转换为列表

我想将整数列表存储为模型中的字段.因为Django默认没有为此提供字段,所以我使用调用的CommaSeparatedIntegerField来完成此操作x.在我看来,然后我接受这个字符串并从中创建一个整数列表.使用参数创建模型实例时n,我希望x将其设置为length n,并将每个元素设置为零.

这是模型:

class Foo(models.Model):
    id = models.IntegerField(default = 0)
    x = models.CommaSeparatedIntegerField(max_length = 10)

@classmethod
def create(cls, _id, n):
    user = cls(id = _id)
    user.class_num_shown = '0,' * n
Run Code Online (Sandbox Code Playgroud)

然后我创建一个实例:

f = Foo.create(1, 4)
f.save()
Run Code Online (Sandbox Code Playgroud)

并从数据库加载它并将字符串转换为列表:

f = Foo.objects.get(id = 1)
x_string = f.x
x_list = x_string.split(',')
print x_list
Run Code Online (Sandbox Code Playgroud)

但这会输出[u'0,0,0,0,']而不是我想要的,这将是[0,0,0,0].如何实现我想要的输出?

python django

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

从列表创建逗号分隔的字符串

我有一个int列表,想要创建一个逗号分隔的字符串.下列:

x = [3, 1, 4, 1, 5]
y = ",".join(x)
Run Code Online (Sandbox Code Playgroud)

给出错误:

TypeError: sequence item 0: expected string, int found
Run Code Online (Sandbox Code Playgroud)

如何创建字符串?我可以手动将每个元素从int转换为字符串,将其插入到新列表中,然后在这个新列表上进行连接,但我想知道是否有更清晰的解决方案.

python string join list

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

链接到共享库时,cmake中没有"制定目标的规则"错误

在Ubuntu中,我已经下载了第三方共享库,mylibrary.so我已将其放在目录中/home/karnivaurus/Libraries.我还放置了相关的头文件,myheader.h在目录中/home/karnivaurus/Headers.我现在想要使用cmake在我的C++代码中链接到这个库.这是我的CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.0.0)

project(DemoProject)

include_directories(/home/karnivaurus/Headers)

add_executable(demo demo.cpp)

target_link_libraries(demo /home/karnivaurus/Libraries/mylibrary)
Run Code Online (Sandbox Code Playgroud)

但是,这给了我错误消息:

:-1: error: No rule to make target `/home/karnivaurus/Libraries/mylibrary', needed by `demo'.  Stop.
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

c++ cmake shared-libraries libraries

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

链接到共享库的Cmake无法找到库

在Ubuntu上,我有两个目录:buildsrc.在src,我的CMakeLists.txt文件有行:

add_executable(Test main.cpp)

target_link_libraries(Test libCamera.so)
Run Code Online (Sandbox Code Playgroud)

在构建目录(cmake ../src)中运行cmake后,我将库文件复制libCamera.so到构建目录中.运行make后,main.cpp.o文件编译成功,但在链接期间收到以下错误:

/usr/bin/ld: cannot find -lCamera
Run Code Online (Sandbox Code Playgroud)

为什么是这样?共享库与我正在构建的目录相同...如果我将库复制到/usr/bin... 则会发生同样的事情

c++ makefile cmake

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