如果 return_exceptions 是
False(默认),第一个引发的异常会立即传播到等待 on 的任务gather()。aws 序列中的其他等待对象不会被取消,而是会继续运行。
但是,从一个简单的测试看来,如果其中一个任务在 return_exceptions 时引发异常,则False所有其他等待对象都将被取消(或者更准确地说,如果我不清楚术语,其他等待对象不会完成它们的工作):
import asyncio
async def factorial(name, number, raise_exception=False):
# If raise_exception is True, will raise an exception when
# the loop counter > 3
f = 1
for i in range(2, number + 1):
print(f' Task {name}: Compute factorial({i})...')
if raise_exception and i > 3:
print(f' Task {name}: raising Exception')
raise Exception(f'Bad Task {name}')
await asyncio.sleep(1)
f *= …Run Code Online (Sandbox Code Playgroud) 我将 a 传递data.frame给一个使用 对其进行排序的函数data.table::setorder。在排序之前,我正在调用data.table::setDT输入(实际上我需要稍后data.table在输入上调用一些特定函数)。这是我正在使用的功能:
test_order <- function(x) {
data.table::setDT(x)
data.table::setorder(x, score)
}
Run Code Online (Sandbox Code Playgroud)
我就是这样称呼它的:
x0 <- data.frame(id = 1:3, score = c(20, 10, 30))
x1 <- test_order(x0)
Run Code Online (Sandbox Code Playgroud)
结果看起来很奇怪:
x0改为a data.table- 看起来还可以;x0$id未修改- 它的地址(使用)保持不变,并且也保持原始顺序;data.table::addressx0$score也保留在相同的地址,但现在已排序,因此它与列不同步id;x1行排序正确;此外,该列与的列score位于同一地址,但该列当然位于不同的地址。这是我得到的:scorex0id> x0
id score
1 1 20
2 2 10
3 3 30
> x1 <- test_order(x0)
> …Run Code Online (Sandbox Code Playgroud) 我想向 a 添加一列,data.table该列是使用 定义的组内的序列by,但对子句中使用的列之一使用条件by。我尝试使用fifelse以下示例:
dt <- data.table::data.table(
id = c(1, 1, 2, 2, 2, 3),
clk = c(1, 1, 0, 2, 2, 5),
val = LETTERS[1:6]
)
dt[, seq_clk := fifelse(clk != 0, seq_len(.N), NA_integer_), by = .(id, clk)]
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误
fifelse(clk != 0, seq_len(.N), NA_integer_) 中的错误:“yes”的长度为 2,但必须为 1 或“test”的长度 (1)。
我期望得到的结果可以通过以下代码实现
dt[, seq_2 := seq_len(.N), by = .(id, clk)][
, seq_clk := fifelse(clk != 0, seq_2, NA_integer_)][
, seq_2 := NULL]
Run Code Online (Sandbox Code Playgroud)
这使 …