小编Que*_*onC的帖子

哪个密钥在Python KeyError中失败了?

如果我抓到了KeyError,我怎么知道查找失败了?

def poijson2xml(location_node, POI_JSON):
  try:
    man_json = POI_JSON["FastestMan"]
    woman_json = POI_JSON["FastestWoman"]
  except KeyError:
    # How can I tell what key ("FastestMan" or "FastestWoman") caused the error?
    LogErrorMessage ("POIJSON2XML", "Can't find mandatory key in JSON")
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

一个王国的公平分裂

最近,我参加了编程比赛.有一个问题,我仍然在考虑.编程语言并不重要,但我用C++编写.任务是这样的:

如您所知,Flatland位于飞机上.Flatland有n个城市,其中i个城市位于(xi,yi)点.有AI的公民居住在第i个城市.平地之王决定将王国分配给他的两个儿子.他想以无限直线的形式建造一堵墙; 每个部分将由其中一个儿子统治.墙不能穿过任何城市.为了避免兄弟之间的嫉妒,两部分的人口必须尽可能接近; 正式地,如果ab分别是居住在第一和第二部分城市的公民总数,则| a - b |的值.必须尽量减少.帮助国王找到最佳分工.城市数量小于1000.所有坐标都是整数.算法的输出应该是最小| ab |的整数

好吧,如果我知道线的方向,那将是非常简单的任务 - 二进制搜索: 黑色数字是城市人口,红色是该部分的总人口

我不想要代码,我想要想法,因为我没有.如果我抓住了想法,我可以编写代码!

我不知道最佳方向,但我认为它可以以某种方式找到.那可以找到它还是以其他方式解决这个问题?

水平/垂直线不是最佳的示例:

1

\
 \
2 \      1
Run Code Online (Sandbox Code Playgroud)

algorithm

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

Pythonic方式结合`for`和`try`块

我有解析JSON提要的代码.

对于每个数组,我的代码如下所示:

for node in parse_me:
    # It's important that one iteration failing doesn't cause all iterations to fail.
    try:
        i = node['id'] # KeyError?
        function_that_needs_int (i) # TypeError?
        # possibly other stuff

    except Exception as e:
        LogErrorMessage ('blah blah blah {} in node {}'.fmt(e, node))
Run Code Online (Sandbox Code Playgroud)

我不喜欢这使得我的for循环双嵌套只是因为我需要阻止异常中止循环.有没有办法压扁这段代码?

python python-3.x

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

如何制作异常代码DRY?

我试图通过使用异常catch-rethrows来调试我的应用程序.我的异常处理代码比我正在调试的一些块长,并且它都是复制粘贴的.

有没有更好的方法来反复表达以下代码?我怀疑宏是这里的方式,但我通常会避免像瘟疫这样的宏.

  try {
   // Code here...
  }
  catch (std::exception & e)
  {
    ErrorMsgLog::Log("Error", "std exception caught in " __func__ " " __FILE__ " " __LINE__, e.what());
    throw e;
  }
  catch (Exception & e)
  {
    ErrorMsgLog::Log("Error", "Builder exception caught in " __func__ " " __FILE__ " " __LINE__, e.Message);
    throw e;
  }
  catch (...)
  {
    ErrorMsgLog::Log("Error", "Unknown exception caught in " __func__ " " __FILE__ " " __LINE__);
    throw std::runtime_error ("Unknown Exception in " __func__ " " __FILE__ " " …
Run Code Online (Sandbox Code Playgroud)

c++ exception dry c++03

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

C++共享指针.如何更改所有副本的基础对象的指针?

虚拟课我有一个奇怪的情况,我需要设计帮助.

  1. 对象确实可以破坏,
  2. 对象存储在向量中,但是我需要从向量中获取对象或对它的引用,更改它,并将该更改反映在对象的所有"副本"中,
  3. 我希望这些对象可以复制.

我有一个解决方案,但我正在寻找一个更好的解决方案.这是我编写的代码,它完成了我正在寻找的东西,但它依赖于指向指针的指针.

我觉得如果我可以直接操作共享指针的底层数据指针,我可以减少一层抽象.

我想用一个InterfaceWrapper,而不是两个.

#include <stdio.h>
#include <memory>
#include <vector>

class Interface
{
  public:
    virtual void WriteIt() = 0;
    virtual ~Interface() { }
};

class Foo : public Interface
{
  void WriteIt() { printf ("Foo\n"); }
};

class Bar : public Interface
{
  void WriteIt() { printf ("Bar\n"); }
};

// This class wraps Interface so we can call WriteIt on desctruction
// I'd like to do this in the Interface class, but you can't call virtual …
Run Code Online (Sandbox Code Playgroud)

c++ boost

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

如何在C++中定义其父级之外的嵌套类

我有两个类,A和B.除了A类并且需要私有访问A的成员之外,B类没有任何意义,所以我觉得它应该是一个私有的嵌套类.

A类已经很复杂了,所以我想把B类的定义保留在A类之外,可能在一个单独的标题中.

我试过这个......

class A;

class A::B
{
  int i;
};

class A
{
  class B;

  B my_b;
  int i;
};

int main (void)
{
  A my_a;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

得到error: qualified name does not name a class before ‘{’ token.

我试试这个......

class A
{
  class B;

  B my_b;
  int i;
};

class A::B
{
  int i;
};

int main (void)
{
  A my_a;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

得到error: field ‘my_b’ has incomplete type ‘A::B’.

这类似于如何从主类之外的嵌套类中编写实际代码 …

c++

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

如何在Python中进行调试打印?

我有一个这样的功能......

def validate_phone(raw_number, debug=False):

我希望调试标志来控制它是否输出日志语句。例如:

if (debug):
  print('Before splitting numbers', file=sys.stderr)

split_version = raw_number.split('-')

if (debug):
  print('After splitting numbers', file=sys.stderr)
Run Code Online (Sandbox Code Playgroud)

然而,该代码非常重复。处理这种 if-flag-then-log 逻辑的最干净(最干燥?)的方法是什么?

python debugging logging python-3.x

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

什么时候std :: map调用映射类型的构造函数?

如果我有这样的容器....

std::map <std::string, IHaveAReallyExpensiveConstructor_t>
Run Code Online (Sandbox Code Playgroud)

我保证IHaveAReallyExpensiveConstructor_t()只有在地图中创建一个新元素时才会调用构造函数,比如说std::map::operator[]

如果重要,只有默认构造很难.复制结构很便宜,而不是真正的问题.

c++ c++03

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

错误:当我流到cout时,'operator <'不匹配

我正在创建一个Matrix类,我正在重载所有的基本运算符.例如:

class Matrix {
    Matrix operator<(const float& ); // returns a Matrix with
                                     // entries 0 or 1 based on
                                     // whether the element is less than
                                     // what's passed in.


};
Run Code Online (Sandbox Code Playgroud)

我还写了一个流媒体运营商:

ostream &operator<<(ostream&cout,const Matrix &M){
    for(int i=0;i<M.rows;++i) {
        for(int j=0;j<M.columns;++j) {
            cout<<M.array[i][j]<<"  ";
        }
        cout<<endl;
    }
    return cout;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用这些时:

int main() {
     Matrix M1;
     cout << M1 < 5.8;
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

错误:' operator<'in' operator<<((* & std::cout), (*(const Matrix*)(& m))) < 5.7999999999999998e+0' 不匹配

这个错误是什么意思?

c++

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

将选择结果连接成一个

我需要编写一个过程或选择将行转换为XML文件中的行的位置.

拉数据并不困难......

SELECT '<XMLData'>
SELECT '<Data1>'+data1+'</Data1><Data2>'+data2+'</Data2>' FROM table
SELECT '</XMLData'>
Run Code Online (Sandbox Code Playgroud)

但那给了我3个结果表.如何将它们连接成1?

sql sql-server

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

根据另一个排列数组元素,而不进行复制

考虑一个数组。根据另一个提供元素新位置的数组(不先复制该数组的副本),将其元素置换的好方法是什么?

例如

int a[]={37,43,5,10}; //array to permute
int b[]={3,1,4,2};  //new position of each element
Run Code Online (Sandbox Code Playgroud)

所以一个应该成为

{43,10,37,5}
Run Code Online (Sandbox Code Playgroud)

我自然想到了制作a的副本,然后在新位置重新分配其元素。但是有没有一种方法可以不复制数组(即更简单的方法)呢?

注意:如果可能的话,不应使用特定的C ++标头,而应仅使用<iostream>

c++ arrays algorithm permutation

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

C编程中的字符串分配

我是C的新手.为了存储字符串文字,我看到了两种方式,如下所示

    char s[]="Mohan";
    char *ptr="Mohan";
Run Code Online (Sandbox Code Playgroud)

那么,这两者之间有什么区别.以及如何为这两个语句分配内存.

提前致谢...

c

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

构造函数错误:输入结束时应为“{”

我无法在子类中声明构造函数,该子类的超类是从模板创建的。

示例代码如下所示:

template <class T>
class foo{
    public:
        foo();
};

typedef foo<double> foo_double;

class bar : public foo_double
{
    bar() : foo_double();
};

int main(){
}
Run Code Online (Sandbox Code Playgroud)

当我编译时,我收到一个错误:

In constructor ‘bar::bar()’:
expected ‘{’ at end of input
Run Code Online (Sandbox Code Playgroud)

我在这里有点不知所措。

c++ inheritance constructor

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