我要生成从一个行字符串Exception,它告诉我什么事,其中(并不需要一个完整的回溯).以下信息会很好:
str(e))目前我做以下事情:
import os
...
try:
os.nonexisting()
except Exception as e:
t = e.__traceback__
tbf = e.__traceback__.tb_frame
print('%s:%d: %s in %s(): "%s" ' %
os.path.basename(tbf.f_code.co_filename),
t.tb_lineno,
e.__class__.__name__,
tbf.f_code.co_name, e))
Run Code Online (Sandbox Code Playgroud)
这给了我:
foo.py:203: AttributeError in foo(): "'module' object has no attribute 'nonexisting'"
Run Code Online (Sandbox Code Playgroud)
是否有更优雅的方式来打印出此示例中给出的详细信息?我正在考虑s.th. 喜欢
print(e.format('%f: %l: %t %F: "%w"'))
Run Code Online (Sandbox Code Playgroud)
我想避免导入额外的模块,除非有一个完全用于此目的.
似乎以前经常有人问过这个问题,但是在我的情况下似乎没有一种解决方案适用。
我在CMake / Linux环境中,必须在构建步骤中运行可执行二进制文件(protoc尤其是)。
该二进制文件需要一个库,但未将其安装(也不能安装在)的标准目录中/usr,因此找不到该库。
不幸的是,我无法操纵该protoc呼叫,因为该呼叫已嵌入第3方脚本中。
现在,我可以LD_LIBRARY_PATH在所有设置之前make设置它,也可以在整个系统上设置它,但这非常不便,特别是在涉及进行构建的IDE或具有连续构建环境的分布式构建方案时。
我试图设置LD_LIBRARY_PATH通过
set(ENV{LD_LIBRARY_PATH} "/path/to/library/dir")
Run Code Online (Sandbox Code Playgroud)
但这似乎在构建步骤中无效。
所以我的问题是:我可以在CMake中设置在构建期间使用的库搜索路径吗?
我已将yaml-cppgit 存储库添加为子模块,并使用add_subdirectory.
一切都很好,但我必须设置YAML_CPP_INCLUDE_DIR并YAML_CPP_LIBRARIES手动将它们用于我自己的目标。
因为有一个文件yaml-cpp-config.cmake(在 build 文件夹中生成)设置了这些变量,所以我试图只包含它:
include("${CMAKE_BINARY_DIR}/yaml-cpp/yaml-cpp-config.cmake")
Run Code Online (Sandbox Code Playgroud)
但后来我得到:
CMake Error at /bla/bla/build/yaml-cpp/yaml-cpp-config.cmake:11 (include):
The file
/bla/bla/aml-cpp/yaml-cpp-targets.cmake
was generated by the export() command. It may not be used as the argument
to the include() command. Use ALIAS targets instead to refer to targets by
alternative names.
Run Code Online (Sandbox Code Playgroud)
我真的不明白这个消息。如何在yaml-cpp不设置硬编码变量的情况下为我的目标提供包含目录和库?
我不是在寻找一种方法来正确地保存 include()文件,以防它不必完成。我只是有兴趣我怎么应该提供给我的目标所需的信息。
不幸的是,yaml-cpp似乎没有使用target_include_directories()which 会在需要的地方自动设置包含目录。
我刚刚为这个问题提供了一个答案,并希望提供一个工作示例,当我发现QMimeData返回的新创建的实例QListModel::mimeData()在应用程序终止之前不会被删除.
所以这不是一个真正的内存泄漏,因为Qt处理QMimeData关闭时的所有实例,但你只需要拖放足够长的时间并将正确的内容放入你的mime数据中以让内存运行满.
我错过了什么?有没有办法告诉Qt QMimeData一旦不再需要它们就立即删除它们?
请注意:
我知道QMimeDataQt会在程序终止时自动删除每个实例.我在这里的问题不是所报告的真实内存泄漏valgrind或cppcheck但它看起来像多和潜在的非常大的QMimeData情况下,获得在运行时不会吹灭了内存消耗和清理.
示例代码:
#include <QtWidgets>
#include <iostream>
struct TrackedMimeData : public QMimeData {
TrackedMimeData(const QString & text) {
std::cout << this << std::endl;
setText(text);
}
~TrackedMimeData() {
std::cout << "~" << this << std::endl;
}
};
struct MyListWidget : QListWidget {
MyListWidget() {
setDragEnabled(true);
addItem("item1");
addItem("item2");
}
QMimeData * mimeData(const QList<QListWidgetItem *>) const override {
return new …Run Code Online (Sandbox Code Playgroud) 我需要一个命令,该命令可以在脚本中使用的简单列表中为我提供所有已修改的文件 -包括暂存(即新添加的文件)和未暂存的更改。虽然这个问题听起来很熟悉,但我只能找到与我想做的事情接近的命令:
git ls-files -m
Run Code Online (Sandbox Code Playgroud)
..列出(非暂存)修改,但忽略暂存和新添加的文件
git diff --name-only
Run Code Online (Sandbox Code Playgroud)
..也只会列出非分阶段的修改
git diff --name-only --cached
Run Code Online (Sandbox Code Playgroud)
.. 仅列出分段修改,但忽略具有非分段修改的文件
git status --porcelain --untracked-files=no
Run Code Online (Sandbox Code Playgroud)
..输出我想查看的所有文件,但添加状态
我git status当然可以使用cut第一个条目,但是由于我想将此命令集成到CMake脚本中,该脚本也将在Windows上使用。所以一个命令就可以了。
PEP8 不喜欢广泛的异常处理,如
try:
do_something()
except Exception:
handle_exception()
Run Code Online (Sandbox Code Playgroud)
我知道,有很好的理由像SystemExit以及KeyboardInterrupt在未inteded方式或丢失重要错误的情况下被处理。
但有时我认为我必须处理“所有其他”异常,例如在这种情况下:
while True:
try:
result = handle_request(get_request())
except (all, my, known, exceptions) as ex:
sophisticated_exception_handling()
except (KeyboardInterrupt, SystemExit):
raise
except Exception as ex:
# handle exotic situations which just didn't happen before
result = "something bad happened: %r" % ex
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我不想让我的消息循环被中断,因为某些子例程引发了一个我还没有考虑过的异常。
当然,我可以只用# pylint: disable这条线来不发出警告 - 但这并不是最复杂的答案。
所以我的问题是:
是否有一些很酷的方法可以很好地处理所有异常,从而在不忽略 PEP8 警告的情况下永远不会脱离我的消息处理循环?
我(只是)希望能够使用QTableView拖放机制来移动现有行。我找到了很多资源(例如,这里,这里或这里),它们描述了拖放,插入等的某些方面,但我仍在努力使其适合我的情况。
这是我正在寻找的解决方案应该具备的功能:
本教程展示了一个非常接近我需要的解决方案,但它使用了一个QStandardItemModel而不是QAbstractTableModel对我来说看起来半优化的解决方案,因为我必须基于(我是对的吗?)QStandardItem需要的“镜像”数据结构进行操作。QStandardItemModel
下面附加了代表我当前进度的代码。
目前我看到两种可能的方法:
方法 1:实现QAbstractTableModel并实现所有需要的事件/槽以修改底层数据结构: * 优点:最通用的方法 * 优点:没有冗余数据 * 缺点:我不知道如何获知已完成的拖放操作以及什么索引移到了哪里
在我附加的代码中,我跟踪了我所知道的所有相关方法并打印出所有参数。这是将第 2 行拖到第 3 行时得到的结果
dropMimeData(data: ['application/x-qabstractitemmodeldatalist'], action: 2, row: -1, col: -1, parent: '(row: 2, column: 0, valid: True)')
insertRows(row=-1, count=1, parent=(row: 2, column: 0, valid: True))
setData(index=(row: 0, column: 0, valid: True), value='^line1', role=0)
setData(index=(row: 0, column: …Run Code Online (Sandbox Code Playgroud) 在我正在处理的项目中的数千个测试用例中,有(大约 10 个)测试很可能会失败(因为它们测试的东西很容易被破坏)。为了使测试快速失败,我想让它们先运行。
我知道--failed-first和排序插件- 两者都有帮助,但不完全满足我的要求:我希望 pytest 能够了解过去失败的所有测试 - 不仅在最后一次运行中,而且如果能够让 pytest 发现这些情况(而不是手动指定它们。
那么有没有一种方法可以实现--failed-most-often-in-the-past呢?
你怎么做到这一点?
目前的方法
通过手动收集失败的测试,您可以先运行它们,只需将它们放在要运行的测试前面即可:
time pytest -x tests/some/generic/test_file.py::failing_test tests
Run Code Online (Sandbox Code Playgroud)
比
time (pytest -x tests/some/generic/test_file.py::failing_test; pytest -x tests)
Run Code Online (Sandbox Code Playgroud)
您现在可以自动收集失败的测试并将它们添加到文件中:
pytest -x $(cat failing_tests.txt) tests
Run Code Online (Sandbox Code Playgroud) 看看这个小脚本:
#!/bin/bash
function do_something() {(
set -e
mkdir "/opt/some_folder" # <== returns 1 -> abort?
echo "mkdir returned $?" # <== sets $0 to 0 again
rsync $( readlink -f "${BASH_SOURCE[0]}" ) /opt/some_folder/ # <== returns 23 -> abort?
echo "rsync returned $?" # <== sets $0 to 0 again
)}
# here every command inside `do_something` will be executed - regardless of errors
echo "run do_something in if-context.."
if ! do_something ; then
echo "running do_something did not work" …Run Code Online (Sandbox Code Playgroud) python ×3
c++ ×2
cmake ×2
exception ×2
python-3.x ×2
bash ×1
executable ×1
formatting ×1
git ×1
if-statement ×1
linker ×1
linux ×1
memory-leaks ×1
ownership ×1
pep8 ×1
pyqt ×1
pytest ×1
qt ×1
qtableview ×1
subshell ×1
yaml-cpp ×1
zeromq ×1