这是forPython中的循环:
for_stmt ::= "for" target_list "in" expression_list ":" suite
Run Code Online (Sandbox Code Playgroud)
通常,当从中产生值时expression_list会引发异常,循环将中止.是否有一种优雅的方式(没有重写循环使用while True或类似的东西)来捕获此异常并继续循环?
这是一个例子:
import csv
csv.field_size_limit(10)
reader = csv.reader(open('test.csv', 'r'))
for line in reader:
print(line)
Run Code Online (Sandbox Code Playgroud)
用这个文件:
foo,bar,baz
xxx,veryverylong,yyy
abc,def,ghi
Run Code Online (Sandbox Code Playgroud)
这在第二行中止.我想要一种方法来跳过或记录失败的行并继续.
如何在该文件中找到require'd' 文件的名称?我可以查看%INC找到所有已加载文件的名称,但我正在寻找类似的东西$0作为关键%INC.
这种事情在厨师食谱中很常见:
%w{foo bar baz}.each do |x|
file "#{x}" do
content "whatever"
end
end
Run Code Online (Sandbox Code Playgroud)
但我想读取与菜谱保存的文件循环的项目,例如:
File.open('files/default/blah.txt').each do |x|
file "#{x}" do
content "whatever"
end
end
Run Code Online (Sandbox Code Playgroud)
如果我给出了blah.txtchef-client碰巧缓存它的完整路径,那么这是有效的,但它不可移植.如果我像在示例中那样编写它,它"无效","希望"当前目录是cookbook的根目录.有没有办法在编制食谱时获取cookbook根目录?
我有一个foo可以通过加载插件的程序dlopen().我正在编写一个这样的插件foobar,它与第三方库提供的功能接口libfoo.
在Linux上,我是这样构建的foobar:
gcc -fpic -c -o foobar.o foobar.c
gcc -fpic -shared -o foobar.so foobar.o -lbar
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
问题是,这不会检测未定义的符号,例如由于代码中的错误或头文件和库之间的不匹配.链接成功,您只有在加载插件或在插件中调用某些内容时才会收到错误(取决于dlopen()标志).
要检测共享库中的未定义符号,通常可以使用-Wl,-z,defs或者使用-Wl,--no-allow-shlib-undefined.但这会失败,因为它还会报告应该foo在运行时在程序中找到的符号.我想检测未定义的符号,但托管程序提供的符号除外.
例如,在Mac OS X上,这可以通过-bundle_loader选项完成.等效的链接命令将是
gcc -bundle -o foobar.so foobar.o -lbar -bundle_loader=foo
Run Code Online (Sandbox Code Playgroud)
并以我想要的方式检测未定义的符号.
如何在GNU/Linux或GNU ld上执行此操作?(我查看了ld手册页中列出的所有选项,但没有一个看起来很有希望.)
在下面的代码中,copyThing()编写了其返回值与其参数值具有相同类型的代码:
extern void *copyThingImpl(const void *x);
#define copyThing(x) ((typeof(x)) copyThingImpl(x))
void foo(void);
void foo(void)
{
char *x = "foo";
char *y;
y = copyThing(x);
(void) y;
}
Run Code Online (Sandbox Code Playgroud)
这使用了广泛可用的typeof运算符。这工作正常并且编译时没有警告(例如,gcc -Wall -O2 -c test.c)。
现在,如果我们改为x指针const,我们会遇到一些小问题:
extern void *copyThingImpl(const void *x);
#define copyThing(x) ((typeof(x)) copyThingImpl(x))
void foo(void);
void foo(void)
{
const char *x = "foo";
char *y;
y = copyThing(x);
(void) y;
}
Run Code Online (Sandbox Code Playgroud)
这会导致警告:
warning: assignment discards 'const' qualifier from pointer target type …Run Code Online (Sandbox Code Playgroud) 我正在开发一个厨师食谱,我正在用Vagrant和厨师独奏进行测试.食谱看待node.name做出某些决定.为了测试它的各种变体,我想覆盖来自Vagrant的测试运行的该属性.所以我试过了
Vagrant.configure("2") do |config|
...
config.vm.provision :chef_solo do |chef|
...
chef.json = {
'name' => 'randomhostname',
}
end
end
Run Code Online (Sandbox Code Playgroud)
但似乎没有效果.
我理解该name属性默认为hostname属性,由ohai管理(另请参阅此问题),但有没有办法覆盖name属性?
我的查询出错了.为什么?我不明白:(
SELECT p.name, p.id, SUM(hours) AS hours, SUM(logged_hours) AS logged_hours
FROM (
SELECT project_id, date, hours, null AS logged_hours
FROM #{ScheduleEntry.table_name}
WHERE user_id = #{User.current.id}
AND date BETWEEN '%s' AND '%s'
UNION
SELECT project_id, spent_on AS date, null AS hours, sum(#{TimeEntry.table_name}.hours) AS logged_hours
FROM #{TimeEntry.table_name}
WHERE user_id = #{User.current.id}
AND spent_on BETWEEN '%s' AND '%s'
GROUP BY project_id, date
) AS results
LEFT JOIN #{Project.table_name} AS p ON p.id = results.project_id
GROUP BY project_id
Run Code Online (Sandbox Code Playgroud) 我有一个我想要下载的.php文件,它会显示一个4位数字.无论如何在没有wget回显到外部文件的情况下检索此输出,然后读取外部文件并删除外部文件.
就像是..
OUTPUT=`wget www.google.com`
print $OUTPUT
Run Code Online (Sandbox Code Playgroud)
它会获得google.com的文本