如果我抓到了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) 最近,我参加了编程比赛.有一个问题,我仍然在考虑.编程语言并不重要,但我用C++编写.任务是这样的:
如您所知,Flatland位于飞机上.Flatland有n个城市,其中i个城市位于(xi,yi)点.有AI的公民居住在第i个城市.平地之王决定将王国分配给他的两个儿子.他想以无限直线的形式建造一堵墙; 每个部分将由其中一个儿子统治.墙不能穿过任何城市.为了避免兄弟之间的嫉妒,两部分的人口必须尽可能接近; 正式地,如果a和b分别是居住在第一和第二部分城市的公民总数,则| a - b |的值.必须尽量减少.帮助国王找到最佳分工.城市数量小于1000.所有坐标都是整数.算法的输出应该是最小| ab |的整数
好吧,如果我知道线的方向,那将是非常简单的任务 - 二进制搜索: 
我不想要代码,我想要想法,因为我没有.如果我抓住了想法,我可以编写代码!
我不知道最佳方向,但我认为它可以以某种方式找到.那可以找到它还是以其他方式解决这个问题?
水平/垂直线不是最佳的示例:
1
\
\
2 \ 1
Run Code Online (Sandbox Code Playgroud) 我有解析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循环双嵌套只是因为我需要阻止异常中止循环.有没有办法压扁这段代码?
我试图通过使用异常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) 虚拟课我有一个奇怪的情况,我需要设计帮助.
我有一个解决方案,但我正在寻找一个更好的解决方案.这是我编写的代码,它完成了我正在寻找的东西,但它依赖于指向指针的指针.
我觉得如果我可以直接操作共享指针的底层数据指针,我可以减少一层抽象.
我想用一个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) 我有两个类,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’.
我有一个这样的功能......
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 逻辑的最干净(最干燥?)的方法是什么?
如果我有这样的容器....
std::map <std::string, IHaveAReallyExpensiveConstructor_t>
Run Code Online (Sandbox Code Playgroud)
我保证IHaveAReallyExpensiveConstructor_t()只有在地图中创建一个新元素时才会调用构造函数,比如说std::map::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' 不匹配
这个错误是什么意思?
我需要编写一个过程或选择将行转换为XML文件中的行的位置.
拉数据并不困难......
SELECT '<XMLData'>
SELECT '<Data1>'+data1+'</Data1><Data2>'+data2+'</Data2>' FROM table
SELECT '</XMLData'>
Run Code Online (Sandbox Code Playgroud)
但那给了我3个结果表.如何将它们连接成1?
考虑一个数组。根据另一个提供元素新位置的数组(不先复制该数组的副本),将其元素置换的好方法是什么?
例如
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的新手.为了存储字符串文字,我看到了两种方式,如下所示
char s[]="Mohan";
char *ptr="Mohan";
Run Code Online (Sandbox Code Playgroud)
那么,这两者之间有什么区别.以及如何为这两个语句分配内存.
提前致谢...
我无法在子类中声明构造函数,该子类的超类是从模板创建的。
示例代码如下所示:
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++ ×7
python ×3
python-3.x ×3
algorithm ×2
c++03 ×2
arrays ×1
boost ×1
c ×1
constructor ×1
debugging ×1
dry ×1
exception ×1
inheritance ×1
logging ×1
permutation ×1
sql ×1
sql-server ×1