小编Mat*_*NNZ的帖子

在执行函数时避免连续的“if (...)”检查

我有一个如下所示的函数:

public Status execute() {
    
    Status status = doSomething();

    if (status != Status.ABORTED) {
        status = doSomethingElse();
    }

    if (status != Status.ABORTED) {
        status = doAgainSomethingElse(param1, param2);
    }

    if (status != Status.ABORTED) {
        doSomethingWhichDoesntReturn(param3);
    }

    //etc.
    
    return status;
}
Run Code Online (Sandbox Code Playgroud)

所以基本上这个函数需要返回一个Status. 这是由第一个函数计算的,然后在执行这些函数时,由后续函数重新计算status != Status.ABORTED

我想重构这段代码,但我没有任何有效的想法。

如果总是这样status = someFunction(someParam),我会使用一个列表Function<TypeInput, Status>并在循环中执行该列表:

List<Function<TypeInput, Status>> actions = List.of(function1, function2...);
for (Function<TypeInput, Status> f : actions) {
    if (status != Status.ABORTED) {
        status = f.apply(input);
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是每个动作可能不同(有时它是一个返回的函数 …

java design-patterns

12
推荐指数
3
解决办法
278
查看次数

Xmlhttp请求引发Access Denied错误

以下Excel宏(它正在向此网页发出xmlhttp请求以在第二阶段检索某些值)在VBA中正常工作,直到一段时间之前:

Sub WebReq()

Link = "http://it.finance.yahoo.com/q?s=^FCHI&ql=10" & str(rnd())
Set htm = CreateObject("htmlFile")

Set RequestWeb = CreateObject("msxml2.xmlhttp")
With RequestWeb
    .Open "GET", "" & Link & "", False
    .send
    htm.body.innerhtml = .responsetext
End With

End Sub
Run Code Online (Sandbox Code Playgroud)

现在,相反,在方法的调用:

    .send
Run Code Online (Sandbox Code Playgroud)

对象msxml2.xmlhttp引发以下错误:

Run-time error '-2147024891 (80070005)'
Access is denied. 
Run Code Online (Sandbox Code Playgroud)

我一直在网上看,但所有类似的线程都没有回答.任何人都可以解释一下这个错误意味着什么,如果有什么方法我可以解决它甚至只是解决它?

注意:已添加变量"链接"末尾的随机字符串以强制重新加载页面,因为脚本正在检索实时值,因此每次都应加载它.

附加信息:在寻找解决方案时,我现在注意到链接的随机部分即使在我结束运行并再次重新启动时总是产生相同的值:

Link = http://it.finance.yahoo.com/q?s=^FCHI&ql=10 .7055475
Run Code Online (Sandbox Code Playgroud)

为什么会这样?rnd()每次通话都不应该产生0到1之间的新随机值?

vba xmlhttprequest

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

即使合并范围位于下方,也仅选择一列

测试用例:

拿一张空纸,并合并范围"D2:F2"。您可以手动执行此操作。

然后,激活宏记录器并E只需单击E电子表格顶部的字母即可选择该列。您将得到以下信息:

Columns("E:E").Select
Run Code Online (Sandbox Code Playgroud)

现在,尝试直接从同一宏运行这行代码:您将看到它选择了三列D, EF

问题:

这是宏记录器的错误吗?或者,更确切地说,VBA 本身的错误(检测我的列中的合并范围并决定扩展选择,即使明确要求选择一个列)?我应该如何通过 VBA 代码仅选择合并范围所在的列之一,就像我可以手动执行的那样?

需要:

我有一个电子表格,年份在一行,月份在下面,日期在下面。因此,天只是单元格,而月份,尤其是年份是几天之间共享/合并的单元格。

我的需要只是检测当前日期并选择列,以便用户了解他们应该在哪一天查看数据。但是,由于“年份”单元格在上面广泛合并,因此选择了整个年份。在此输入图像描述

excel vba

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

更改QLineEdit文本时(以编程方式)执行操作

我编写了以下带有QLineEdit的代码片段,可以通过按"添加文本"按钮进行编辑.

import sys
import os
from PyQt4 import QtGui
from PyQt4 import *

class SmallGUI(QtGui.QMainWindow):
    def __init__(self):
        super(SmallGUI,self).__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300,300,300,300)
        self.setWindowTitle('Sample')

        #One input
        self.MyInput = QtGui.QLineEdit(self)
        self.MyInput.setGeometry(88,25,110,20)
        ###############

        QtCore.QObject.connect(self.MyInput,QtCore.SIGNAL("textChanged(bool)"),self.doSomething)

        #Add Text
        self.MyButton = QtGui.QPushButton(self)
        self.MyButton.setGeometry(QtCore.QRect(88,65,110,20))
        self.MyButton.setText('Add Text')
        ###############

        QtCore.QObject.connect(self.MyButton,QtCore.SIGNAL("clicked(bool)"),self.addText)

        self.show()

    def addText(self):
        self.MyInput.setText('write something')

    def doSomething(self):
        print "I'm doing something"

def main():
    app = QtGui.QApplication(sys.argv)
    sampleForm = SmallGUI()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

我想要做的是在以编程方式更改QLineEdit的文本时执行操作,即单击"添加文本"按钮,执行以下操作:

QtCore.QObject.connect(self.MyInput,QtCore.SIGNAL("textChanged(bool)"),self.doSomething)
Run Code Online (Sandbox Code Playgroud)

我使用信号"textChanged"的原因与类文档所说的有关,即"当以编程方式更改文本时也会发出此信号,例如,通过调用setText()."

但是这不起作用,因为不执行print语句.任何人都可以帮我解决这个问题吗?

python pyqt

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

NoClassDefFoundError: org/w3c/dom/ls/DocumentLS - 在编译时修复后仅在部署时发生的问题

背景

我有一个项目,我在其中解析一些 XML 文档,但碰巧需要xerces依赖项:

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xerces</artifactId>
    <version>2.4.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

使用 编写单元测试时junit4,每次运行单元测试时都会遇到问题,每次编译时都会出现以下问题mvn clean install

[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.346 s <<< FAILURE! - in ConversionTest
[ERROR] ConversionTest.initializationError  Time elapsed: 0.054 s  <<< ERROR!
java.lang.NoClassDefFoundError: org/w3c/dom/ls/DocumentLS
        at ConversionTest.fromDirectory(ConversionTest.java:92)
        at ConversionTest.data(ConversionTest.java:65)
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.ls.DocumentLS
        at ConversionTest.fromDirectory(ConversionTest.java:92)
        at ConversionTest.data(ConversionTest.java:65)
Run Code Online (Sandbox Code Playgroud)

编译时解决方案

在网上搜索,我意识到我需要向我的pom.xml:添加一个新的依赖项:

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.11.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这样做之后,测试编译得很好,我可以生成我的.jar,它与以下构建插件一起打包:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath> …
Run Code Online (Sandbox Code Playgroud)

java xerces maven java-11

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

将日期代码添加到matplotlib/python图表

我有一个听起来很简单的问题,但它让我疯了几天.我有一个历史时间序列在两个列表中关闭:第一个列表包含价格,让我们说P = [1,1.5,1.3 ...],而第二个列表包含相关日期,让我们说D = [01/01/2010,02/01/2010 ...].我想做的是绘制这些日期中的一些(当我说"某些"是因为我到目前为止所获得的"最佳"结果是将所有这些显示为代码,因此在其中创建了一个黑色的不可读数据云. x轴)当放大时,会更详细地显示.这张照片现在具有Matplotlib制作的渐进式自动化范围:

缩小

而不是0,200,400等.我想要绘制与数据点相关的日期值.而且,当我放大时,我得到以下内容:

放大

除了我得到0到200之间的细节(20,40等)我想把日期附在列表上.我确定这是一个简单的问题要解决,但我是Matplotlib以及Python的新手,任何提示都会受到赞赏.提前致谢

python matplotlib

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

Python:更改实例列表中的元素位置

我有一个由类实例组成的列表:

MyList = [<instance1>, <instance2>, <instance3>]
Run Code Online (Sandbox Code Playgroud)

我想更改第三个元素的位置,<instance3>现在应该保持在 index = 1 的位置,因此输出如下:

MyList = [<instance1>, <instance3>, <instance2>]
Run Code Online (Sandbox Code Playgroud)

我已经建立了一个简单的例子:

a = [1,2]
b = [3,4]
c = [5,6]
d = [a,b,c]
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我以下print d输出:

d = [[1, 2], [3, 4], [5, 6]]
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法交换元素 (1) 和 (2):

d.remove(c)
d.insert(c,1)
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出(这是我想要的):

d = [[1, 2], [5, 6], [3, 4]]
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试对我的实例列表进行相同处理时,出现以下 AttributeError:

AttributeError: entExCar instance has no attribute '__trunc__'
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我是否在方法中错了(例如:您不能将这种技术与实例列表一起使用,您应该做“这个或那个”)或我设置代码的方式?以下脚本是我尝试运行时出现错误的实际代码:

newElement = self.matriceCaracteristiques[kk1]    
self.matriceCaracteristiques.remove(newElement) 
self.matriceCaracteristiques.insert(newElement,nbConditionSortieLong)   
Run Code Online (Sandbox Code Playgroud)

提前致谢。

编辑:更多细节

entExCar 是正在初始化 self.matriceCaracteristiques 的类是我要操作的列表 newElement …

python python-2.7

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

实例化课程 - 有和没有括号之间的区别

经过很长一段时间收回Python并希望刷新一些概念,我希望这个问题不错.

假设我有一个非常简单的类,如下所示:

class myClass:
    def __init__(self): 
        self.myProp = 2
Run Code Online (Sandbox Code Playgroud)

如果我使用括号实例化,一切都按预期工作:

>>> a = myClass()
>>> a.myProp
2
Run Code Online (Sandbox Code Playgroud)

但是,如果我不使用上面两行的括号,即:

>>> a = myClass
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

>>> a.myProp
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
a.myProp
AttributeError: class myClass has no attribute 'myProp'
Run Code Online (Sandbox Code Playgroud)

如果我打印对象,

>>> a = myClass
>>> a
Run Code Online (Sandbox Code Playgroud)

我明白了

<class __main__.myClass at 0x0275C538>
Run Code Online (Sandbox Code Playgroud)

它似乎a是该类的一个实例,但不知何故未初始化.在其他语言中,如果尝试将类实例强制转换为对象而不进行初始化(例如在C#中,它myClass a = new myClass();会正常工作但myClass a = new myClass;会返回编译错误),我会期望编译错误.

所以我的问题是:从技术上讲,a = …

python python-2.7

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

根据其值更改<select>的颜色 - 仅限CSS(?)

我有一个HTML select元素,里面有一些选项:

<select class = "myRed" id="mySelect" onchange="onSelectChange()">
    <option selected value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我希望选择对象的文本颜色在其值为0时为红色,否则为黑色.我可以通过JavaScript来做到这一点:

function onSelectChange(){
    if (document.getElementById('mySelect').value == 0){
        document.getElementById('mySelect').className = 'myRed';
    } else {
        document.getElementById('mySelect').className = 'myBlack'
    }
}
Run Code Online (Sandbox Code Playgroud)

哪里

.myRed{color:red;}
Run Code Online (Sandbox Code Playgroud)

.myBlack{color:black;}
Run Code Online (Sandbox Code Playgroud)

但是,我被告知这只能通过CSS以某种方式访问​​,而不使用JavaScript.除了使用JS,我无法考虑任何其他方式.有人可以建议吗?

html javascript css

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

在循环中连接字符串中的输入

我有一个源变量,基本上是一串逗号分隔的元素:

SOURCES="a b c d e"
Run Code Online (Sandbox Code Playgroud)

我希望用户为每个源输入一个目的地,因此我希望将此输入存储到类似于上面但包含目的地的字符串中.如果我想分配a = 1,b = 2 ......等,我会这样:

echo $DESTINATIONS >>> "1 2 3 4 5"
Run Code Online (Sandbox Code Playgroud)

为了做到这一点,我这样做:

SOURCES="a b c d e"
DESTINATIONS=""

for src in $SOURCES
do
    echo Input destination to associate to the source $src:
    read dest
    DESTINATIONS=$DESTINATIONS $dest
done
Run Code Online (Sandbox Code Playgroud)

但是,如果我做一个echo$DESTINATIONS,我觉得很空.而且,在每个循环中,我的shell告诉我:

-bash: = **myInput**: command not found
Run Code Online (Sandbox Code Playgroud)

知道我哪里做错了吗?

string bash string-concatenation sh

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