忘记保存更改 结论 欢迎来到Java学习路线专栏~那些让我苦笑不得的Bug经历 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒 ✨博客主页:IT·陈寒的博客 该系列文章专栏:Java学习路线 其他专栏...; console.log(greeting); 这段代码看起来完全正常,但却在字符串中使用了单引号,导致了语法错误。...这可能会导致逻辑错误和意外行为。 4....忘记递增或递减 let count = 0; for (let i = 0; i < 5; i) { count++; } console.log(count); 在这个循环中,我们忘记了递增i...迭代器越界 my_list = [1, 2, 3] for i in range(4): print(my_list[i]) 在这个Python示例中,我们试图迭代一个超出数组边界的索引。
1.语法错误 语句本身的语法存在问题,常见的有循环语句后面少了冒号、用了中文的标点符号、字符串赋值时引号少一个等等,属于非逻辑错误。...解析器会输出出现语法错误的那一行,并显示一个“箭头”,指向这行里面检测到的第一个错误。...ImportError:当我们试图引入不存在的库时,并且当 from ... import 中的 "from list" 存在无法找到的名称时 In [16]: from os import x Traceback...:')) ValueError: invalid literal for int() with base 10: 'a' 比如当我们使用int对输入对象进行转化为整数时,输入的对象是字符串时,这是一个不合适的参数...,我常常在程序执行过程中想复制部分打印信息的时候错使用 Control+C想着复制却使得程序中断的情况。
这是我在我的书《Understanding ECMAScript 6》中所提到的,但是,我仍然会收到关于它的问题,所以我想深挖一下这个问题。...如果你使用ECMAScript模块,这也不是一个问题,它以严格模式运行所有代码。 为什么要有此变化? 由于严格模式和非简单参数列表的工作方式,此更改很重要。...在这一点上,“use strict”不能影响解析参数列表的结果,它只用于验证参数标识符(不允许重复和检查禁用的标识符,如eval和arguments)。...JavaScript解析器试图解析此代码,参数列表将会在函数体之前被解析。...在这种情况下,TC-39决定通过引入一个新的语法错误消除歧义,如果这个问题早点出现,便可能是ECMAScript 6(2015)的一部分。
使用单数和复数式名称, 可帮助你判断代码段处理的是单个列表元素还是整个列表。 4.1.2 在 for 循环中执行更多的操作 在for循环中,可对每个元素执行任何操作。...I can't wait to see your next trick, Carolina. 在for循环中,想包含多少行代码都可以。...例如,你可能使用for循 环来初始化游戏——遍历角色列表,将每个角色都显示到屏幕上;再在循环后面添加一个不缩进 的代码块,在屏幕上绘制所有角色后显示一个Play Now按钮。...4.2.2 忘记缩进额外的代码行 有时候,循环能够运行而不会报告错误,但结果可能会出乎意料。试图在循环中执行多项任 务,却忘记缩进其中的一些代码行时,就会出现这种情况。...在有些情况下,这可能导致Python报告语法错误,但在大多数情况下,这只会导致逻辑错误。 例如,如果不小心缩进了感谢全体魔术师精彩表演的代码行,结果将如何呢?
1.1 为什么要有这些作用域 当我们用作用域把代码包起来的时候,其实就是对它们进行了“隐藏”,让我们对其有控制权,想让谁访问就可以让谁访问,想禁止访问也很容易。...“隐藏”作用域中的变量和函数所带来的另一个好处,是可以避免同名标识符之间的冲突,冲突会导致变量的值被意外覆盖。...内部的赋值表达式 i = 3 意外的覆盖了声明在 foo(...) 内部 for 循环中的 i ,在这个例子中因为 i 始终被设置为 3 ,永远满足小于 10 这个条件,导致无限循环。...内部的赋值操作需要声明一个本地变量来使用,采用任何名字都可以,var i = 3; 就可以满足这个要求。另外一种方法是采用一个完全不同的标识符名称,比如 var j = 3; 。...当然,我们在 for 循环中使用 var 时也可以通过立即执行函数形成一个新的闭包来解决这个问题。
版本 日期 备注 1.0 2023.8.8 文章首发 代码高亮:关键字和自定义的一些标识符都一个颜色,看起来真的好难受。一些常见的IDE里都会把他们区别开来。...代码提示补全:对于一些关键字,只要输入前缀,就可以选择补全,有效减少输入量与开发者脑部负担。 语法错误提示与建议修复:在写错code时及时给出提示,尽早修复问题,避免拖到runtime。...1.2 语法错误提示 错误提示是个很重要的功能,让错误尽早地被发现可以有效提升开发效率——举个例子,当我们的Flink SQL比较长时,拉起来就要耗一些时间,等startup的时候错误才会报出来。...查看某些标识符被引用的地方,并快速跳转。 1.5 直接运行代码 VS Code虽然是一款编辑器,但完全可以通过定制、安装插件的方式来将其打造成一个IDE。...下载一个VS Code。 在插件栏中搜索"Flink",可以看到...,点击安装。 除了语法错误提示,其他功能都是开箱即用的。
(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl...UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 常用异常...) 如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理 为什么要进行异常处理?...),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性 使用try..except的方式 1:把错误处理和真正的工作分开来 2...:代码更易组织,更清晰,复杂的工作任务更容易实现; 3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了; 什么时候用异常处理 有的同学会这么想,学完了异常处理后,好强大,我要为我的每一段程序都加上
随着我越来越频繁的使用FlinkSQL,我发现了一个问题——FlinkSQL的确很好用,它和标准的SQL差别不大,但写起来明显没有在DataGrip里写SQL来得快乐:如果有一个类似DataGrip的工具...从它的页面上了解关于编辑属性的功能,我认为有几点是可以有效提升体验的:代码高亮:关键字和自定义的一些标识符都一个颜色,看起来真的好难受。一些常见的IDE里都会把他们区别开来。...代码提示补全:对于一些关键字,只要输入前缀,就可以选择补全,有效减少输入量与开发者脑部负担。语法错误提示与建议修复:在写错code时及时给出提示,尽早修复问题,避免拖到runtime。...1.2 语法错误提示错误提示是个很重要的功能,让错误尽早地被发现可以有效提升开发效率——举个例子,当我们的Flink SQL比较长时,拉起来就要耗一些时间,等startup的时候错误才会报出来。...下载一个VS Code。在插件栏中搜索"Flink",可以看到...,点击安装。除了语法错误提示,其他功能都是开箱即用的。
异常和错误 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def...,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python...代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量...) 如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理 为什么要进行异常处理?...(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性 使用try..except的方式
当我们编写node原生模块的时候,免不了对node-gyp项目进行命名,在node-gyp进行build的时候,会跟binding.gyp配置文件中的target_name生成对应的原生模块。...在VS中,我们进行进行如下的配置,让编译器首先生成宏展开的源码: 然后,我们重新进行编译,可以看到在对应的生成目录下,产生了一个.i后缀的文件。...我们直接定位到这个文件的最下方,可以看到我们已经经过宏展开的代码: 我们67404这行宏展开的代码拷贝到VS对应宏使用的地方,通过IDE来更加智能的检查这段有何问题: 因为改行很长,这里我进行一下格式化代码的操作...如果target_name使用的"hello_world",则不会有这个问题: 实际上被"-"分割,是因为在宏展开的时候,作为了函数名的一部分,而函数名标识符是不能有"-"的。...所以这就是为什么target_name使用有中横线的名称会报错了。
我将使用Sapo网站上一个简单的搜索结果页面,预先指定一些参数(如区域、价格过滤器、房间数量等)来减少任务时间,或者直接在Lisbon查询整个结果列表。 然后,我们需要使用一个命令来从网站上获得响应。...这听上去很简单,我从哪儿开始? 与大多数项目一样,我们得导入所需模块。我将使用Beautiful Soup来处理我们将要获取的html。始终确保你试图访问的站点允许抓取。...,这就是为什么我将定义一个标题来传递get命令,这相当于使我们对网站的查询看起来像是来自一个实际的浏览器。...价格在第3个标签中,即为索引中的位置2 所以价格是很容易得到的,但在文本中有一些特殊的字符。解决这个问题的一个简单方法是用空字符替换特殊字符。当我将字符串转换为整数时,我会对其进行分割。 ?...在我上图贴出的循环中,我实际上将结果限制在价格高于10,000欧元(&lp= 10,000)的范围内。
一个是可视化的,另一个是基于文本的。基于文本的语法( Backus-Naur 形式)通常被提供给另一个解析器,该解析器解析该语法并为其生成一个解析器。?...好吧,别急,我的朋友,我们刚刚完成了理想的情况,那异常的情况呢? 处理意外的输入 作为一名优秀的开发人员,我们还需要优雅地处理异常情况。对于解析器,这意味着使用适当的错误消息对开发人员进行提醒。...让我们处理两种最常见的错误情况: •意外的标记•字符串意外结束 意外的标记 字符串意外结束 在所有的while循环中,比如parseObject中while循环: function fakeParseJSON...while(str[i] !== '}') { 我们需要确保访问的字符不会超过字符串的长度。在这个例子中,这发生在字符串意外结束时,而我们仍然在等待一个结束字符“}”。...+; return result; } } 加倍努力 您还记得您还是一名初级开发人员的时候,每当您遇到带有加密消息的语法错误时,您完全不知道出了什么问题吗?
如果你没有明确告诉解析器这是一个表达式,它会认为这是一个匿名的函数声明并抛出意外的语法错误,因为函数声明需要名称。...题外话:函数,括号,语法错误 有趣的是,如果你为一个函数指定了名称并且在立刻在其后边放置了括号,解析器也会抛出错误,但原因不同。...立即执行函数表达式(IIFE) 幸运的是,固定的语法错误很简单。最普遍接受的方式告诉解析器这是一个被括号包裹的函数表达式。...); }; })( i ), 'false' ); } 注意最后两个例子,虽然 lockedInIndex 可以获得 i 的值,但是使用一个不同的名称标识符作为函数参数可以使复杂的概念易于解释...因为相比“executed”,我更喜欢“invoked”,一个简单的原因是因为 头韵。我认为“IIFE”听上去比“IEFE”更好。 以上就是我的看法。
一、程序结构的优化 1、程序的书写结构 虽然书写格式并不会影响生成的代码质量,但是在实际编写程序时还是应该尊循一定的书写规则,一个书写清晰、明了的程序,有利于以后的维护。...2、标识符 程序中使用的用户标识符除要遵循标识符的命名规则以外,一般不要用代数符号(如a、b、x1、y1)作为变量名,应选取具有相关含义的英文单词(或缩写)或汉语拼音作为标识符,以增加程序的可读性,如:...实际上,只要是乘以或除以一个整数,均可以用移位的方法得到结果,如: a = a * 9; 可以改为: a = (a << 3) + a; 5、循环 (1) 循环语 对于一些不需要循环变量参加运算的任务可以把它们放到循环外面...但是在循环中有通过循环变量“i”读写数组的指令时,使用预减循环时有可能使数组超界,要引起注意。.../用户程序 } 或: unsigned int i; i = 1000; do { i--; //用户程序 } while (i>0); 在这两种循环中,使用do…while循环编译后生成的代码的长度短于
循环变量i从0计数到size-1。每次在循环中,我们都用equals来看看我们是否找到了目标。如果是这样,我们立即返回i。否则我们移动到列表中的下一个Node。...那么这种方法的增长级别是什么? 每次在循环中,我们调用了equals,这是一个常数时间(它可能取决于target或data大小,但不取决于列表的大小)。循环中的其他操作也是常数时间。...这就是为什么 Java 提供了多个实现,因为它取决于你。 4.3 性能分析 对于下一个练习,我提供了一个Profiler类,它包含代码,使用一系列问题规模运行方法,测量运行时间和绘制结果。...setup方法执行在启动计时之前所需的任何工作;这里它会创建一个空列表。然后timeMe执行我们试图测量的任何操作;这里它将n个元素添加到列表中。...当我运行它时,我得到这个输出: 4000, 3 8000, 0 16000, 1 32000, 2 64000, 3 128000, 6 256000, 18 512000, 30 1024000, 88
例如,在遍历一系列数字或列表索引的for循环中,通常使用i(代表索引)作为变量名,如果有嵌套循环,则使用j和k(因为它们在字母表中位于i之后): >>> for i in range(10): ......print(i, j) ... 0 0 0 1 0 2 1 0 `--snip--` 另一个例外是将x和y用于笛卡尔坐标。在大多数其他情况下,我警告不要使用单字母变量名。...我不知道这意味着什么,因为我们正在创造的产品与鸟类或下载鸟类毫无关系。当我找到最初编写这个函数的更资深的同事时,他解释说goose是一个动词,意思是“推动引擎”,我也不知道这句话是什么意思。...当你试图调用 Pyperclip 的copy()或paste()函数时,你会得到一个错误,说它们不存在: >>> # Run this code with a file named pyperclip.py...,尤其是当您意外地得到这些has no attribute错误消息时。
~ 如下:不可以重复声明的哟~ 如果一个标识符在代码块中已经被定义了,那么在此代码块内部使用同一标识符进行let声明,就会导致错误的哟~ var da = '魔王哪吒'; // 语法错误 let...=> { console.log(i) }, i*1000) } 会打印出6个6,原因:for循环中用var来申明变量i,此时var存在变量提升问题,并且6次循环中全都共用一个变量,所以当...在循环中let声明每次都创建了一个新的i变量,因此在循环内部创建的函数获得了各自的i副本 每个i副本的值都在每次循环迭代声明变量的时候被确定 示例: var arr = [], object = { a...,而不是试图去修改已绑定的变量的值。...函数每个参数都会创建一个新的标识符绑定,它在初始化之前不允许被访问,否则会抛出错误。
bug本意是“昆⾍”或“⾍⼦” ,Bug是指计算机程序或系统中的错误或缺陷。它可能导致程序无法正常工作或产生意外的结果。...一、调试(debug) 1. 1 Debug和Release 当我们发现程序中的问题时,下一步就是找到并修复它们。这个过程被称为调试,在英文中被称为debug(消灭bug)。...arr[10]的值竟然改了,赋值为0了,稍后,我们再解释,先让程序继续走–> i=11,也把值给改了; 当i=12,arr[12]就等于12了 这是为什么呢?...如果是左边的内存布局,那随着数组 下标的增⻓,往后越界就有可能覆盖 到i,这样就可能造成死循环的。 这⾥肯定有同学有疑问:为什么i和arr数组之间恰好空出来2个整型的空间呢?...三、编程常⻅错误归类 3.1 编译型错误 编译错误通常是语法错误。这类错误通常可以通过错误信息找到一些线索,双击错误信息也可以初步跳转到代码错误的位置或附近。
在 ES6 中引入了关键字 let,使我们能够使用块作用域中的变量,从而帮助我们防止意外行为。 在这里,我们会得到与 Situation 2 中相同的错误。...在这种情况下,它们是否有相同的名字或标识符并不重要。 在控制台中,我们应该看到 Mike 和 John 被依次输出。为什么?...内部变量优先于外部变量,这就是为什么我们可以使用相同标识符的原因。 2.继承 考虑以下类,并尝试回答输出了什么以及为什么。...为什么:每次我们创建一个新的 Student 实例时,都会将 sayHello 属性设置为是一个函数,并返回字符串 Hello。这是在父类(Person)类的构造函数中发生的。...我们试图重新分配不允许使用的 const 变量,所以将会得到类型错误。
领取专属 10元无门槛券
手把手带您无忧上云