我正在尝试设计一个Python程序,该程序使用日志记录模块记录所有未捕获的异常。我通过使用sys.excepthook函数覆盖默认的异常处理来做到这一点。我注意到,如果我直接从命令行运行程序,则可以正常运行,但是如果尝试导入文件,则无法正常运行。似乎sys.excepthook函数没有意识到日志记录模块。这是一个例子:
#! /usr/bin/env python2.7
import logging, sys
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.FileHandler("test.log"))
print "outside of exception handler: logger = %s" % logger
def handleException(excType, excValue, traceback):
#global logger # this function doesn't work whether or not I include this line
print "inside exception handler: logger = %s" % logger
logger.error("Uncaught exception", exc_info=(excType, excValue, traceback))
sys.excepthook = handleException
logger.debug("starting")
asdf # create an exception
Run Code Online (Sandbox Code Playgroud)
如果我从命令行(./loggingTest.py)运行此程序,则效果很好。异常被记录,我看到以下输出:
outside of exception handler: logger = <logging.RootLogger object at 0x7f2022eab950>
inside exception handler: logger …Run Code Online (Sandbox Code Playgroud) 我正在开发一个网络应用程序.我试图禁用链接上的大多数默认iOS Safari行为,所以我在链接上设置"-webkit-touch-callout"CSS属性为"none".但是,我仍然注意到,如果我将手指放在链接上一秒左右,然后拖动它,然后放开它,链接将在新窗口中打开.我不想要这种行为.我想要在同一个窗口打开,或者什么也不做.有谁知道如何实现这一目标?
编辑:我正在使用jQuery所以可以使用jQuery的事件处理函数,如果这将简化事情.
编辑2:对于某些链接,我使用处理程序来覆盖其默认行为.例如:
$(".categoryList a").live("click", function(e) {
e.preventDefault();
$.get(
"someOtherUrl",
{someVariable: "someValue"},
function(result) {
$(".result").html(render(result));
}
);
});
Run Code Online (Sandbox Code Playgroud)
我的实际代码比这更复杂,但我的观点是我在某些链接上覆盖默认的单击操作,而我用来解决此问题的任何解决方案都不应该干扰这些处理程序.Sanooj的解决方案不能用于我的目的,因为"window.location"赋值总是重定向浏览器,无论我是否有任何处理程序来阻止此行为.也许我可以说不应该为此目的使用链接,但这是应用程序在我开始工作之前的方式,并且改变这将是一个大项目.我想知道是否有一种更简单,更简单的方法来解决这个问题.
目前我使用基本mset功能来存储键/值;
from common.redis_client import get_redis_client
cache = get_redis_client()
for k,v in some_dict.items():
kw = {'key': value}
cache.mset(kw)
#later:
cache.get('key')
Run Code Online (Sandbox Code Playgroud)
我分别存储每个键/值(例如,不是在一个json中)因为存储整个dict会把它变成一个字符串,并且需要我在存储和检索时序列化/反序列化,我真的需要访问单独的键/值.
我的问题::有没有办法可以同时使用mset多个键/值?而不是多次写入redis数据库?反之亦然,我可以在一次访问中有多个读取(get)吗?(是的 - 我有很多redis活动正在进行并且负载很重.我确实关心这个)
我正在尝试Light Table并学习如何使用它.总的来说,我喜欢它,但我注意到在Python程序中使手表和内联评估工作的唯一方法是使用Python 2.7.8,这使得它与我的一些代码不兼容.有没有办法让它使用Python 3?
我看了谷歌和GitHub,我找不到任何有希望的东西.
我在OS X 10.10.2上使用Mac.我有一个Python 3.4.0的安装,从终端运行良好.
因此,自动完成+在安装时随Atom一起提供,默认情况下已启用.
当我编写代码时,没有任何显示,为什么?
在正常工作之前是否需要配置任何文件?
使用node.js模块语法,您可以加载模块并在一个表达式中使用它:
const numCPUs = require('os').cpus().length;
Run Code Online (Sandbox Code Playgroud)
ES6模块有没有相应的东西?
import os from 'os';
const numCPUs = os.cpus().length;
Run Code Online (Sandbox Code Playgroud)
是我能得到的最接近的; 这是两个完整的陈述,并留给我一个不需要的绑定os.
关于时间复杂度的Python wiki 页面表示删除一个项目需要 O(n) 时间。集合模块的文档中对 deque 类的描述表示“list对象 [...] 会产生 O(n) 内存移动成本pop(0)以及insert(0, v)更改底层数据表示的大小和位置的操作”。
为什么列表需要 O(n) 时间?列表不就是一堆元素或指向元素的指针,在内存中物理上彼此相邻,以及指向列表开始位置的指针吗?list如果是这样,为什么该类型不能有popleft一个类似于 中的方法collections.deque,通过适当增加列表的起始指针来在 O(1) 时间内删除第一个元素?
我并不是想解决任何具体问题。我只是想满足我的好奇心,为什么要这样设计。
编辑:popleft这是我的方法如何工作的图表:
致电之前popleft:
-------------------------------------------------------------------
| The | quick | brown | fox | jumps | over |
-------------------------------------------------------------------
^
pointer to list
Run Code Online (Sandbox Code Playgroud)
致电后popleft:
-------------------------------------------------------------------
| The | quick | brown | fox | jumps | over |
-------------------------------------------------------------------
^
pointer to …Run Code Online (Sandbox Code Playgroud) 我有一个站点,使用基本标记来设置相对URL的绝对路径.它在我测试过的所有浏览器中都能正常工作,除了IE(大惊喜).根据IE为CSS文件提出的请求,似乎没有注意到基本标记.它确实使用页面上的其他内容来确认基本标记.为什么会这样?除了使用绝对路径引用CSS文件之外,还能做些什么吗?这是我的代码:
<!DOCTYPE html>
<html><head>
<title>base test</title>
<base href="/baseTest/">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div>foo</div>
</body></html>
Run Code Online (Sandbox Code Playgroud)
这是baseTest/style.css文件中的内容:
div {
background: yellow;
}
Run Code Online (Sandbox Code Playgroud)
编辑:同样的事情似乎也发生在图像上.我做的所有测试都是在IE9中进行的.标准模式以及IE8和IE7兼容模式出现了问题.
编辑2:如果我指定绝对URL,它工作正常.我不知道对相对URL的支持是最近的功能.我可能会放弃我的计划使用基本标记来避免重复路径,除非我能找到一些方法(比如可能是JS hack)来完成这项工作.
我试图在给定的字符串中交换所有出现的一对子串.
例如,我可能想用"茶"取代所有出现的"咖啡",用"咖啡"取代所有出现的"茶".
这是我想到的第一件事:
var newString = oldString.replace(/coffee/g, "__").replace(/tea/g, "coffee").replace(/__/g, "tea");
Run Code Online (Sandbox Code Playgroud)
它大部分时间都有效,但如果我的输入字符串包含子串"__",它将无法正常工作.
无论我给出什么输入,我都在找一些有用的东西,所以我想了更多,并想出了这个:
var pieces = oldString.split("coffee");
for (var i = 0; i < pieces.length; i++)
pieces[i] = pieces[i].replace(/tea/g, "coffee");
var newString = pieces.join("tea");
Run Code Online (Sandbox Code Playgroud)
它工作正常,但它有点丑陋和冗长.我尝试提出更简洁的东西,并使用jQuery内置的map函数来提出这个:
var newString = $.map(oldString.split("coffee"), function(piece) {
return piece.replace(/tea/g, "coffee");
}).join("tea");
Run Code Online (Sandbox Code Playgroud)
这样更好,但我仍然觉得有一种非常简单的方法没有出现在我的脑海中.这里有人知道更简单的方法吗?
假设我有一个数组.我想删除数组中具有给定值的所有元素.有谁知道如何做到这一点?我试图删除的值可能会多次出现,并且数组不一定要排序.我宁愿原地过滤数组而不是创建一个新数组.例如,2从数组中删除值[1, 2, 3, 2, 4]应该产生结果[1, 3, 4].
这是我能想到的最好的事情:
T[] without(T)(T[] stuff, T thingToExclude) {
auto length = stuff.length;
T[] result;
foreach (thing; stuff) {
if (thing != thingToExclude) {
result ~= thing;
}
}
return result;
}
stuff = stuff.without(thingToExclude);
writeln(stuff);
Run Code Online (Sandbox Code Playgroud)
这似乎不必要地复杂和低效.有更简单的方法吗?我查看了标准库中的std.algorithm模块,希望找到一些有用的东西,但看起来像我想做的一切都有问题.以下是我尝试过的一些不起作用的例子:
import std.stdio, std.algorithm, std.conv;
auto stuff = [1, 2, 3, 2, 4];
auto thingToExclude = 2;
/* Works fine with a hard-coded constant but compiler throws an error when
given …Run Code Online (Sandbox Code Playgroud) javascript ×4
python ×3
css ×2
html ×2
algorithm ×1
atom-editor ×1
autocomplete ×1
base ×1
big-o ×1
d ×1
ecmascript-6 ×1
exception ×1
ios ×1
lighttable ×1
list ×1
logging ×1
module ×1
node.js ×1
python-3.x ×1
redis ×1
redis-py ×1
regex ×1
safari ×1
string ×1
typescript ×1