小编Eli*_*ria的帖子

sys.excepthook在导入的模块中不起作用

我正在尝试设计一个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)

python logging exception

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

禁用iOS Safari中链接的默认拖动行为

我正在开发一个网络应用程序.我试图禁用链接上的大多数默认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"赋值总是重定向浏览器,无论我是否有任何处理程序来阻止此行为.也许我可以说不应该为此目的使用链接,但这是应用程序在我开始工作之前的方式,并且改变这将是一个大项目.我想知道是否有一种更简单,更简单的方法来解决这个问题.

html javascript css safari ios

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

Redis-python在一次操作中设置多个键/值

目前我使用基本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活动正在进行并且负载很重.我确实关心这个)

redis redis-py

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

从Light Table运行Python 3

我正在尝试Light Table并学习如何使用它.总的来说,我喜欢它,但我注意到在Python程序中使手表和内联评估工作的唯一方法是使用Python 2.7.8,这使得它与我的一些代码不兼容.有没有办法让它使用Python 3?

我看了谷歌和GitHub,我找不到任何有希望的东西.

我在OS X 10.10.2上使用Mac.我有一个Python 3.4.0的安装,从终端运行良好.

python python-3.x lighttable

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

Atom'自动完成+'无法正常工作

因此,自动完成+在安装时随Atom一起提供,默认情况下已启用.

当我编写代码时,没有任何显示,为什么?

在正常工作之前是否需要配置任何文件?

javascript autocomplete typescript atom-editor

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

在一个表达式中加载和使用ES6模块

使用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.

javascript module node.js ecmascript-6

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

为什么 Python 需要 O(n) 时间才能从列表中删除第一个元素?

关于时间复杂度的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)

python algorithm big-o list

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

在引用CSS文件时,IE不支持基本元素中的相对路径

我有一个站点,使用基本标记来设置相对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)来完成这项工作.

示例页面:http://www.debugtheweb.com/test/base/relative.html

html css internet-explorer base internet-explorer-9

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

如何在字符串中交换子字符串?

我试图在给定的字符串中交换所有出现的一对子串.

例如,我可能想用"茶"取代所有出现的"咖啡",用"咖啡"取代所有出现的"茶".

这是我想到的第一件事:

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)

这样更好,但我仍然觉得有一种非常简单的方法没有出现在我的脑海中.这里有人知道更简单的方法吗?

javascript regex string

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

从D中的数组中删除所有出现的给定值

假设我有一个数组.我想删除数组中具有给定值的所有元素.有谁知道如何做到这一点?我试图删除的值可能会多次出现,并且数组不一定要排序.我宁愿原地过滤数组而不是创建一个新数组.例如,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)

d

5
推荐指数
2
解决办法
340
查看次数