我想知道在Python中指示无效参数组合的最佳实践.我遇到过一些你有这样功能的情况:
def import_to_orm(name, save=False, recurse=False):
"""
:param name: Name of some external entity to import.
:param save: Save the ORM object before returning.
:param recurse: Attempt to import associated objects as well. Because you
need the original object to have a key to relate to, save must be
`True` for recurse to be `True`.
:raise BadValueError: If `recurse and not save`.
:return: The ORM object.
"""
pass
Run Code Online (Sandbox Code Playgroud)
唯一令人烦恼的是,每个包装都有自己的,通常略有不同BadValueError.我知道在Java中存在java.lang.IllegalArgumentException- 是否很好理解每个人都将BadValueError在Python中创建自己的s或者是否有另一种首选方法?
我觉得我在Vim中做80列指示的方式不正确:set columns=80.有时我也是,set textwidth但我希望能够看到并预测线路溢出的set columns替代方案.
这有一些不幸的副作用 - 我不能set number因为害怕在具有不同行号顺序的文件之间进行拆分; 即<100行文件和> = 100行文件将需要两个不同的set columns值,因为附加数字显示使用了额外的列.我也开始新的(g)Vim会话而不是垂直分割窗口,这迫使我使用窗口管理器的剪贴板 - 每次打开或关闭窗格时都vsplit强制我这样做set columns,所以开始一个新的会话就不那么麻烦了.
当你想要set numbers,垂直分割等时,你如何处理80个字符的指示?
令我遗憾的是,我无法弄清楚如何处理python'with'语句的异常.如果我有一个代码:
with open("a.txt") as f:
print f.readlines()
Run Code Online (Sandbox Code Playgroud)
我真的想处理'文件未找到异常'以便进行处理.但我不能写
with open("a.txt") as f:
print f.readlines()
except:
print 'oops'
Run Code Online (Sandbox Code Playgroud)
并且不能写
with open("a.txt") as f:
print f.readlines()
else:
print 'oops'
Run Code Online (Sandbox Code Playgroud)
在try/except语句中包含'with'不起作用:不引发异常.为了以Pythonic方式处理'with'语句内部的失败,我该怎么办?
现在我在框架中有一个中央模块,它使用Python 2.6 multiprocessing模块生成多个进程.因为它使用multiprocessing,所以有模块级多处理感知日志,LOG = multiprocessing.get_logger().根据文档,这个记录器具有进程共享锁,因此您不会sys.stderr通过让多个进程同时写入来解决问题(或任何文件句柄).
我现在遇到的问题是框架中的其他模块不支持多处理.我看到它的方式,我需要使这个中央模块的所有依赖使用多处理感知日志记录.这在框架内很烦人,更不用说框架的所有客户了.我有没有想到的替代方案?
出于某种原因,看起来构造函数委派在以下代码段中不起作用:
function NotImplementedError() {
Error.apply(this, arguments);
}
NotImplementedError.prototype = new Error();
var nie = new NotImplementedError("some message");
console.log("The message is: '"+nie.message+"'")
Run Code Online (Sandbox Code Playgroud)
运行这个给出The message is: ''.有关为什么,或者是否有更好的方法来创建新Error子类的任何想法?是否存在我不知道apply的本机构Error造函数的问题?
我只是遇到了以下错误(并在线找到了解决方案,但它在Stack Overflow中不存在):
(.gnu.linkonce.[stuff]):对[方法] [目标文件]的未定义引用:(.gnu.linkonce.[stuff]):对[classname]的`typeinfo的未定义引用
为什么可能会得到这些"未定义的typeinfo引用"链接器错误之一?
(如果你能解释幕后发生的事情,可以给予奖励.)
>>> r'\'
File "<stdin>", line 1
r'\'
^
SyntaxError: EOL while scanning string literal
>>> r'\\'
'\\\\'
>>> r'\\\'
File "<stdin>", line 1
r'\\\'
^
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)
似乎解析器可以将原始字符串中的反斜杠视为常规字符(不是原始字符串的全部内容吗?),但我可能遗漏了一些明显的东西.TIA!
以下代码表示将map传递const给operator[]方法会丢弃限定符:
#include <iostream>
#include <map>
#include <string>
using namespace std;
class MapWrapper {
public:
const int &get_value(const int &key) const {
return _map[key];
}
private:
map<int, int> _map;
};
int main() {
MapWrapper mw;
cout << mw.get_value(42) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是因为地图访问中可能出现的分配吗?没有地图访问的函数可以声明为const吗?
MapWrapper.cpp:10: error: passing ‘const std::map<int, int, std::less<int>, std::allocator<std::pair<const int, int> > >’ as ‘this’ argument of ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = int, _Tp = int, _Compare = std::less<int>, _Alloc …
如果我使用以下方法在特定元素上设置CSS值:
$('#element').css('background-color', '#ccc');
Run Code Online (Sandbox Code Playgroud)
我希望能够取消设置特定于元素的值并使用级联值,如下所示:
$('#element').css('background-color', null);
Run Code Online (Sandbox Code Playgroud)
但是这种语法似乎不起作用 - 这是否可以使用另一种语法?
提前致谢!
编辑:该值不是从父元素继承的 - 原始值来自元素级选择器.对不起任何混乱!
在决定使用单例与静态类之间进行设计考虑.在这样做时,你有点被迫对比这两者,所以无论你能想出什么对比,都有助于展示你的思考过程!此外,每位采访者都喜欢看到说明性的例子.:)