如果我有一个对象的引用:
var test = {};
Run Code Online (Sandbox Code Playgroud)
可能(但不是立即)有嵌套对象,如:
{level1: {level2: {level3: "level3"}}};
Run Code Online (Sandbox Code Playgroud)
在最深层嵌套的对象中测试密钥是否存在的最佳方法是什么?
alert(test.level1);收益率undefined,但alert(test.level1.level2.level3);失败了.
我现在正在做这样的事情:
if(test.level1 && test.level1.level2 && test.level1.level2.level3) {
alert(test.level1.level2.level3);
}
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更好的方法.
有没有比简单地尝试打开文件更好的方法?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我被告知使用Java try-catch机制会有一些开销.因此,虽然有必要在try块中放置抛出checked异常的方法来处理可能的异常,但是在性能方面优化的做法是限制try块的大小以仅包含那些可能抛出异常的操作.
我不太确定这是一个明智的结论.
考虑以下两个实现处理指定文本文件的实现.
即使第一个产生一些不必要的开销是正确的,我发现它更容易遵循.通过查看语句来确定异常的确切位置尚不清楚,但评论清楚地表明哪些陈述是负责任的.
第二个比第一个更长更复杂.特别是,第一个很好的读行成语必须被修改以使readLine调用适合try块.
在函数中处理异常的最佳实践是什么?在定义中可能抛出多个异常?
这个包含try块中的所有处理代码:
void processFile(File f)
{
try
{
// construction of FileReader can throw FileNotFoundException
BufferedReader in = new BufferedReader(new FileReader(f));
// call of readLine can throw IOException
String line;
while ((line = in.readLine()) != null)
{
process(line);
}
}
catch (FileNotFoundException ex)
{
handle(ex);
}
catch (IOException ex)
{
handle(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
这个只包含在try块中抛出异常的方法:
void processFile(File f)
{
FileReader reader;
try
{
reader = new FileReader(f);
}
catch (FileNotFoundException ex)
{
handle(ex); …Run Code Online (Sandbox Code Playgroud) 我在前面的回答中读到异常处理在Python中很便宜所以我们不应该进行预条件检查.
我以前没有听说过这个,但我对Python比较陌生.异常处理意味着动态调用和静态返回,而if语句是静态调用,静态返回.
如何做好检查是坏的,try-except好的,似乎是另一种方式.谁可以给我解释一下这个?
很简单,我想删除一个可能存在也可能不存在的文件。仅使用remove(filename)并忽略返回值是不好的做法吗?
编辑:通过删除,我指的是这个
假设我们有2d数组:
ar = [[1,2],
[3,4]]
if ar[1][1]:
#works
if not ar[3][4]:
#breaks!!
Run Code Online (Sandbox Code Playgroud)
因为我是python的新手,需要知道什么是优雅的语法.
所以我试图创建一个文件并从中读取,即使它是空的。因此,下次运行该程序时,该文件将已经存在并且其中会有数据。
#this should create the file
filename = open("roombooking.bin","wb")
#this should load the data into a list but since its first created it should be an empty list
monday=pickle.load(open("roombooking.bin","rb"))
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误
Traceback (most recent call last):
monday=pickle.load(open("roombooking.bin","rb"))
File "C:\Python27\lib\pickle.py", line 1378, in load
return Unpickler(file).load()
File "C:\Python27\lib\pickle.py", line 858, in load
dispatch[key](self)
File "C:\Python27\lib\pickle.py", line 880, in load_eof
raise EOFError
EOFError
Run Code Online (Sandbox Code Playgroud) 我有一个表"INSERTIF",看起来像这样 -
id value
S1 s1rocks
S2 s2rocks
S3 s3rocks
Run Code Online (Sandbox Code Playgroud)
在将一行插入此表之前,我想检查给定的ID是否存在.如果它不存在,则插入.否则,只需更新值即可.我想以线程安全的方式做到这一点.你能告诉我我的代码是否正确吗?我尝试了它,它的工作原理.但是,我想确保我没有遗漏任何性能问题.
编辑1-我想使用此代码一次插入数百万行.每个insert语句都包含在我显示的代码中.
编辑2 -我不想使用我的代码的UPDATE部分,只插入就足够了.
我不想使用MERGE,因为它只适用于SQL Server 2008及更高版本
谢谢.
代码 -
-- no check insert
INSERT INTO INSERTIF(ID,VALUE)
VALUES('S1', 's1doesNOTrock')
--insert with checking
begin tran /* default read committed isolation level is fine */
if not exists
(select * from INSERTIF with (updlock, rowlock, holdlock)
where ID = 'S1')
BEGIN
INSERT INTO INSERTIF(ID,VALUE)
VALUES('S1', 's1doesNOTrock')
END
else
/* update */
UPDATE INSERTIF
SET VALUE = 's1doesNOTrock'
WHERE ID = …Run Code Online (Sandbox Code Playgroud) python ×3
c ×2
c++ ×1
delete-file ×1
file ×1
filesystems ×1
java ×1
javascript ×1
list ×1
nested ×1
nested-lists ×1
object ×1
performance ×1
pickle ×1
properties ×1
readability ×1
sql ×1
sql-server ×1