我有一组复杂的 R 脚本,并决定将所有与调试相关的消息称为 via message()。我试图找到一种方法来抑制所有消息,并偶然发现了这篇SO post,它建议我尝试使用sink(). 因此,我将以下代码行插入到我的脚本中,并设置了我的config$debug_mode <- FALSE:
if (!config$debug_mode){
messages <- file("messages.Rout", open = "wt")
sink(messages, type = "message")
}
Run Code Online (Sandbox Code Playgroud)
另一个 SO 帖子和 R 文档说只需调用sink()或sink(file=NULL)停止之前的转移,但这对我不起作用。即使在调用 之后sink(),我也没有看到我的message()调用中的 R Studio 控制台输出。此外,sink.number()返回0,这似乎表明没有转移。那么,为什么我不再在 R Studio 控制台中看到输出?
我正在尝试在 Jenkins 中运行 Python 映像以使用 pytest 执行一系列单元测试,但是我在使用 Docker 时遇到了一些奇怪的行为。
我的 Jenkinsfile 管道是
agent {
docker { image 'python:3.6-jessie' }
}
stages {
stage('Run tests') {
steps {
withCredentials([
string(credentialsId: 'a-secret', variable: 'A_SECRET')
{
sh label: "Install dependencies", script: 'pip install -r requirements.txt'
sh label: 'Execute tests', script: "pytest mytests.py"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行管道时,Docker 似乎正在执行一条很长的指令(-e环境变量比我定义的凭据多得多?),然后是cat.
然后构建只是挂起并且永远不会完成:
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 996:994
-w /var/lib/jenkins/workspace/myproject
-v …Run Code Online (Sandbox Code Playgroud) 我学习VBA并且真的很困惑Range()VBA 究竟需要什么.我对OOP和Java/Python等语言有着非常扎实的把握,但是VBA在这里给我一个循环.
我尝试使用时出错
Set MyRange = Range(ActiveCell, Range(ActiveCell.End(xlDown)))
Run Code Online (Sandbox Code Playgroud)
我知道正确的解决方案是
Set MyRange = Range(ActiveCell,ActiveCell.End(xlDown))
Run Code Online (Sandbox Code Playgroud)
但我试图理解为什么会这样.该错误特别来自Range(ActiveCell.End(xlDown)).我知道从MSDN文档中.End()返回一个Range对象.
但是,当我写作
MsgBox (TypeName(ActiveCell))
Run Code Online (Sandbox Code Playgroud)
我被告知这ActiveCell是一个Range对象.Range("A1")工作完全正常(当然),同时Range(ActiveCell)抛出一个错误,所以我想这证实了Range()没有接受Range对象.
但是,"A1"显然是一个String.当我输入Range()我的VBA编辑器时,我看到它Range()接受Cell作为参数参数.那么a Cell和a 之间的关系Range是VBA什么?是Range继承自Cell?我很困惑为什么Range()接受其他Range对象,还有String?
如果Range()不接受Range对象作为参数,那么为什么这段代码可以工作呢?
Range("A2", Range("A2").End(xlDown).End(xlToRight))
这里没有.End()退回Range物品吗?
我有一个关于 的实现的由两部分组成的问题object.__getattribute(self, key),但它们都集中在我对它如何工作的困惑上。
我定义了一个名为 的数据描述符NonNullStringDescriptor,我打算将其附加到属性上。
class NonNullStringDescriptor:
def __init__(self, value: str = "Default Name"):
self.value = value
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
if isinstance(value, str) and len(value.strip()) > 0:
self.value = value
else:
raise TypeError("The value provided is not a non-null string.")
Run Code Online (Sandbox Code Playgroud)
然后我声明一个Person具有 属性的类name。
class NonNullStringDescriptor:
def __init__(self, value: str = "Default Name"):
self.value = value
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
if …Run Code Online (Sandbox Code Playgroud) 我正在学习如何Enum在 Python 中使用类,并且发现每当我需要访问枚举的实际值时,我都需要附加.value属性:
from enum import Enum
class Pets(Enum):
DOG = "Fido"
CAT = "Kitty"
Pets.DOG # yields Pets.DOG
Pets.DOG.value # yields Fido
Run Code Online (Sandbox Code Playgroud)
作为练习,我正在尝试配置我的Enum类,这样我就不需要不断访问该value属性。我想要的行为是,当我打电话时Pets.DOG,我得到Fido了我的价值。
我试图实现这一点__getattr_(cls, item):
class Pets(Enum):
def __getattr__(self, item):
print(f"__getattr__ called with {item}")
return getattr(self, item).value
DOG = "Fido"
CAT = "Kitty"
if __name__ == "__main__":
pets = Pets()
pets.DOG
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个RecursionError: maximum recursion depth exceeded while calling a Python object, 并且 …