小编cat*_*cat的帖子

这个 DeprecationWarning ("callable is None") 有什么用?

我正在编写一个模块,我正在使用unittest与实际代码一起编写单元测试。

有时(似乎几乎是不确定的),像下面这样的函数没有明确返回一个值,用self.assertRaises(mymodule.MyEmptyException, myfunc())(whereself指的是 的子类unittest.TestCase)断言会引发一个神秘的DeprecationWarning.

这是此类函数的示例:

def insertn(self, items, lidex):
    """( z y x -- z b y x )
    add a list of items to the stack at the given index"""
    iter(items)
    for idx, obj in enumerate(items):
        self.insert(lidex, obj)
        lidex += 1
Run Code Online (Sandbox Code Playgroud)

其对应的单元测试:

def test_insertn_fail(self):
    """expect failure during multiple insertion"""
    self.assertRaises(mouse16.BadInternalCallException,
        stack.insertn([8, 4, 12], 16))
    with self.assertRaises(TypeError):
        stack.insertn(8, 16)
Run Code Online (Sandbox Code Playgroud)

给出(例如):

./mousetesting.py:103: DeprecationWarning: callable is None
Run Code Online (Sandbox Code Playgroud)

我认为使函数具有非None返回值可能会解决问题(即return 0 …

python python-unittest

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

什么类型的Perl 6中的任何类型的列表?

考虑以下Python代码(作为示例):

a = 5 
b = "a"
l = [a, b] # -> typing.List[typing.Any]
print(l)   
# [5, "a"]
Run Code Online (Sandbox Code Playgroud)

列表的类型llist; 它不受它所拥有的类型的约束,因为Python是非常动态的类型.

将此与Go相比较,Go是强结构类型的:

var list []uint8{1, 2, 3, 4, 5, 6}
Run Code Online (Sandbox Code Playgroud)

该列表只能保存最多255个无符号整数.它不能保存任何其他类型.

也去:

var multi interface{"string", []int{9, 5}, rune('5'), []interface{}}
Run Code Online (Sandbox Code Playgroud)

接口允许不同类型的容器.


考虑Perl 6的,这更加动态地在类型比Python say 6 + "1";会给7的整数.(谁认为这是一个我不知道的好主意.)

我喜欢逐渐输入我的程序(特别是对于我正在学习的Perl 6),它提高了可读性和可维护性.

以下工作都不是:

use strict;
my Int $n = 6;
my Str $x = "a";
my Int @l = $n, $x;
Run Code Online (Sandbox Code Playgroud)

也不

use strict;    
my Int $n = …
Run Code Online (Sandbox Code Playgroud)

list perl6

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

为什么Python中没有Inf,-Inf和NaN关键字?

PEP 754的拒绝通知中,它声明:

该PEP已被拒绝.在开放四年后,它未能产生足够的社区兴趣.

为Python 2.6实现了这个PEP的几个想法.现在可以保证float('inf')和repr(float('inf'))可以在IEEE 754语义的每个支持平台上运行.但是,除非您自己定义inf和nan,否则仍然不支持eval(repr(float('inf')))往返:

>>> inf = float('inf')
>>> inf, 1E400
(inf, inf)
>>> neginf = float('-inf')
>>> neginf, -1E400
(-inf, -inf)
>>> nan = float('nan')
>>> nan, inf * 0.
(nan, nan)
Run Code Online (Sandbox Code Playgroud)

这似乎表明在Python中没有对Inf,NaN和-Inf的本机支持,并且提供的示例是准确的!但是,这是不必要的冗长:

$ python2.7
>>> 1e400
inf
>>> 1e400 * 0
nan
>>> -1e400 * 0
nan
>>> -1e400
-inf
$ python3
>>> 1e400
inf
>>> 1e400 * 0
nan
>>> -1e400 * 0
nan
>>> -1e400
-inf
Run Code Online (Sandbox Code Playgroud)

这些都是典型的数量1*10 ^ 400名陈述inf …

python ieee-754

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

如何将Result类型转换为有用的类型?

我想要一个数字列表:

auto nums = iota(0, 5000);
Run Code Online (Sandbox Code Playgroud)

现在nums是类型Result.它不能被强制转换int[],也不能用作替代品int[].

文档中不太清楚如何实际使用iota作为范围.我使用了错误的功能吗?在D中制作"范围"的方法是什么?

d range

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

不安全的JavaScript尝试访问Google Chrome中的框架

我们的网络应用程序(基于HTML5,SVG和JS)在除谷歌浏览器之外的所有浏览器中运行良好.

在谷歌浏览器中,正常的javascript事件运行正常,但是,附加到iFrame的所有javascript事件都不会执行.我们在控制台中收到错误:

Unsafe JavaScript attempt to access frame
Run Code Online (Sandbox Code Playgroud)

目前,该应用程序是本地托管的,并且在内部测试期间出现了这个问题.

谷歌搜索这带来了很多帖子,但没有提出任何具体的解决方案.有什么建议?

javascript security iframe google-chrome

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

我可以“挂钩”变量重新分配吗?

Python 是一种可以实现以下功能的语言:

>>> class A(object):
...  def __eq__(self, _):
...   return True
... 
>>> a = A()
>>> a == "slfjghsjdfhgklsfghksjd"
True
>>> a == -87346957234576293847658734659834628572384657346573465
True
>>> a == None
True
>>> a is None
False
Run Code Online (Sandbox Code Playgroud)

其他东西,比如gtlt也可以通过这种方式“重载” 1,在我看来,这是一个很棒的功能。

我很好奇赋值运算符是否也可以以类似的方式=“重载” 1 ,或者我是否必须将 Python 重新编译为NotPython才能执行此操作。

(据我所知,类和对象不实现某些__assign__方法;这是使用 C 字节码运行器/编译器实现的。)

具体来说,我想通过迭代令牌列表来实现 LL( k ) 解析器,而不使用迭代器,这样我就可以任意更改迭代器的索引以跳转到给定令牌。

问题是,在给定的循环周期中,如果我已经任意修改了索引以准备下一个周期(我肯定会做很多事情),我想做的最后一件事就是通过以下方式弄乱该变量给它加一,就好像它没有被改变一样。

也许最简单、最简单的解决方案是在跳转时设置一个标志,并在False每个周期重置该标志,但这可能并且会引入我想提前避免的微小隐藏错误。(请参阅此处了解我的意思 - 这是我正在重写的可悲的迭代 LL( 1 ) 解析器,我希望它的转世在某种程度上可维护和/或可读 …

python variables

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

"量词没有量化",但我从未要求量词

考虑以下Perl风味?(我想不是?)正则表达式来测试一个字符串是否是回文:

^((.)(?1)\2|.?)$
Run Code Online (Sandbox Code Playgroud)

试试吧.

下列

my regex palindrome {
    ^((.)(?1)\2|.?)$
}

say "$word is a palindrome"
    if $word ~~ /<palindrome>/
    && $word.chars > 1;
Run Code Online (Sandbox Code Playgroud)

给出错误

===SORRY!===
Quantifier quantifies nothing
at /home/cat/projects/perl6/code/misc/words.pl6:6
------>   ^((.)(??1)\2|.?)$
Unrecognized backslash sequence (did you mean $1?)
at /home/cat/projects/perl6/code/misc/words.pl6:6
------>   ^((.)(?1)\2?|.?)$
Run Code Online (Sandbox Code Playgroud)

我对(Python)正则表达式有一定的了解,当我说"量化器没有量化"时我得到了它的意思,但是当我要求递归而不是量化时,我不明白为什么它会这样说.

我没有足够的Perl知识来知道为什么它不喜欢反斜杠(另一个错误).

确实试着搞乱语法和搜索,但就我和互联网而言,这个正则表达式工作,并且摆弄它会产生我不会得到的各种其他错误.

我究竟做错了什么?

regex perl perl6 quantifiers

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

如何在D中处理或检测系统信号?

D(相当稀疏)的官方文档没有关于在*nx或Windows上处理系统信号的任何信息.

system模块只有EndianOS,syserror已被弃用/仅对Windows ERRORTEXT,并且signals是大约消息传递,而不是系统的信号.

是否有一种方法(在纯D中)安装信号处理程序,捕获并允许我在运行时对某些信号作出反应,或者至少是一种检测信号被接收的方法和我可以的异常catch

即,在Python中,一个简单的例子是:

import signal
signal.signal(signal.SIGSEGV, myFunctionToHandleSEGV)
# ...
Run Code Online (Sandbox Code Playgroud)

signals d

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

使用"MIT风格的curried-procedure表单"和传递给`curry`函数的lambda表达式有什么区别吗?

鉴于随后的代码片段,example-func-A和之间有什么有意义的区别example-func-B吗?

#lang racket/base

(require (only-in racket/function curry))

(define (((example-func-A x) y) z)
  (+ x y z))

(define example-func-B
  (curry
   (lambda (x y z)
     (+ x y z))))
Run Code Online (Sandbox Code Playgroud)

racket

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

我可以避免使用D导入污染公共命名空间吗?

似乎没有简单的方法可以防止D的import语句蒙上全局命名空间:

module x;    
import std.stdio;

void main() {
    writeln("Hello!");
}
Run Code Online (Sandbox Code Playgroud)

一旦你import std.stdio,writeln现在是全球性的.来自[language with namespaces],如果我只能参考,那将是很好的std.stdio.writeln,特别是在一两个星期内,我可以轻松地告诉我们提供什么writeln.

用类和结构读取命名空间在我看来,这应该做我想做的事情(尽管不像现在这样):

module x;
import std.stdio;

class String {
  struct write {
    auto println = writeln;
  }
}

void main() {
  String string = new String();
  string.write.println("Hello!");
}
Run Code Online (Sandbox Code Playgroud)

但我知道Error: variable [...] type void is inferred from initialiser [...], and variables cannot be of type void,这意味着功能混叠已经消失.

如果我写C,我可以理解缺少命名空间(但我仍然可以用结构和点符号来实现它们).有没有办法让导入的名称不那么全球化?

namespaces d

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

URL查询字符串中的字段名称有多个值?

Python3 urllib.parse.parse_qs奇怪地返回string, list<string>查询字符串的字典:

>>> import urllib.parse as p
>>> url = p.urlparse("http://exam.ple/path?query=string&yes=no")
ParseResult(scheme='http', netloc='exam.ple', path='/path', params='', query='query=string&yes=no', fragment='')

>>> p.parse_qs(url.query)
{'query': ['string'], 'yes': ['no']}
Run Code Online (Sandbox Code Playgroud)

该函数的文档说:

字典键是唯一的查询变量名称,而值是每个名称的值列表。

我可以以某种方式利用此“值列表”功能吗?

无论是维基百科,也不堆栈溢出,也不IETF规范有关“多”或字段的值“列表”提任何东西,我找不到任何这样的语法:

>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string&yes=no/a=0").query)
{'query': ['string'], 'yes': ['no/a=0']}
>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string@yes=no").query)
{'query': ['string@yes=no']}
>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string;yes=no").query)
{'query': ['string'], 'yes': ['no']}
>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string,yes=no").query)
{'query': ['string,yes=no']}
Run Code Online (Sandbox Code Playgroud)

似乎没有分隔符会导致键的值包含多个字符串。可能吗?

python standards specifications urllib query-string

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

为什么这些魔术方法不是递归的?

这是一个实现一些魔术方法的 Python 类:

class A():
    def __init__(self, value):
        self.value = value

    def inc(self):
        self.value += 1
        return self.value

    def dec(self):
        self.value -= 1
        return self.value

    def __eq__(self, other):
        return self.value == other

    def __gt__(self, other):
        return self.value > other

    def __lt__(self, other):
        return self.value < other

    def __setattr__(self, name, value):
        try:
            self.value
        except:
            pass
        else:
            print(name, "changed its value from", self.value, "to", value)
        finally:
            super().__setattr__(name, value)
Run Code Online (Sandbox Code Playgroud)

它实现了在某些对象上定义的(尽管是冗余的)方法,并允许比较和(在这种__setattr__情况下)赋值挂钩:

>>> a.inc()
value changed its value from 0 to …
Run Code Online (Sandbox Code Playgroud)

python recursion operator-overloading python-3.x

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

如何使用正则表达式从内联样式中删除样式元素?

我试图float从内联样式中只删除一个属性及其值.我想从这开始:

<div id="first_line_info" style="width:490px; float:right;"> </div>
Run Code Online (Sandbox Code Playgroud)

并使它像这样:

<div id="first_line_info" style="width:490px"> </div>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我尝试过这段代码:

Regex noInlineStylePattern = new Regex("style=\"[^\"]*\"", RegexOptions.IgnoreCase);
data = noInlineStylePattern.Replace(data, "");
Run Code Online (Sandbox Code Playgroud)

这将删除所有内联样式.我怎样才能移除浮子?

html javascript css c# regex

-85
推荐指数
2
解决办法
4262
查看次数