首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python抛出异常捕获异常_try块可以抛出异常

PythonLearn Python抛出异常【1】 程序运行过程 Python解释器遇到一个错误 会停止程序运行 并且提示一些错误信息 这个 就是异常 程序停止并且提示错误信息动作叫做抛出异常...算术错误基类 ZeroDivisionError 算数错误子类,除法或模运算第二个参数是零 BufferError 缓冲区错误 注意 如果不确定需要打印异常种类 只是单纯不想让程序暂停 可以使用基类...Exception 但是 Python不推荐使用这种方法 抛出异常格式 1.基本语法 try: num = int(input("请输入一个数字:")) print(num) except...解释器从上向下执行 当运行try某行代码出错,会直接进入except执行下方代码 try错行下方代码不会被运行 except…as… 是固定语法格式 打印traceback信息 finally...后代码不管是否抛出异常都会执行 except 原理 调用sys exc.info 方法返回基本信息 所以抛出异常第一步拓展可以在这里开始 注意 每个关键字下方代码都是独立(所有的变量都是局部变量

4.5K60

Jupyter Notebook 查看所使用 Python 版本 Python 解释器路径

当用户 Notebook 编写代码并运行单元格时,这些代码会被发送到 Kernel 进行执行,然后 Kernel 将执行结果发送回前端进行显示。...这个解释器可以是系统安装任何 Python 版本(例如 Python 3.6.5、Python 3.9.18 等),也可以是用户通过 Anaconda 等工具安装特定环境。...融合到一个文件代码示例 下面是一个简单 Python 代码示例,它可以 Jupyter Notebook 运行。这段代码定义了一个函数,并使用该函数计算两个数。...可以通过 Notebook 运行 import sys print(sys.version) 来查看当前 Python 解释器版本信息。...可以通过 print(sys.executable) 来查看当前 Python 解释器可执行文件路径。

19000
您找到你想要的搜索结果了吗?
是的
没有找到

用go做个编译器:语法解析树及其实现

9-(5+2),所得结果是2,因此不同语法树会导致不同操作结果。...因此语法有歧义情况下,虽然给定字符串能通过解析,但是后续操作,例如生成中间代码,或是解释器要解释执行语句时就会有问题,因为它不知道应该用哪一种语法树为基础,于是前面几节我们设定语法生产式就存有歧义...此外语法解析树之所以作用很大,是因为我们可以给每个节点赋予一些属性,以及基于属性特点操作,当我们遍历完整个解析树,并针对每个节点执行它对应操作后,我们会得到很好结果,后面我们会看到中间代码生成就依赖于这种方法...list_parser.go做如下代码修改: package simple_parser import ( "errors" "io" "lexer" ) type SimpleParser...完成代码如下: package main import ( "fmt" "io" "lexer" "simple_parser" ) func main() {

1.1K50

GopherChina-2019 观后感

下面简单说下几点感受吧: 初来北京 大会地点设在北京 16 号线永丰南站,属于北京比较偏地方,然后预定酒店呢,也是根据范围来刷选。...4月28号: 公司 主题 探探 基于 Mino 对象存储方案探探应用 英语流利说 从零实现 Lexer Parser 腾讯 高性能高可用框架 TarsGo JetBrains Using Go...比如腾讯分享是:TarsGo 一个 RPC 框架, GRPC 很像,但是又结合了微服务、k8s 等 TarsGo 比如小米分享是:高性能数据库中间件 小米 GitHub 主页 比如知乎分享是:Python...转 Go 最佳实践以及一些性能提升、还有一些过程坑 知乎社区核心业务 Golang 化实践 比如探探分享是:分布式存储 Mino 方案 比如流利说分享是:Lexer Parser 再比如...比如为什么要开发Laxer Parser,为什么自己定义标记语言? 比如为什么要开发数据库中间件,占用内存偏高,怎么解决? 比如为什么选择 Mino,技术选型结束遇到坑怎么办?

69120

可以不source脚本情况下将变量从Bash脚本导出到环境

echo $VAR 有没有一种方法可以通过只执行 export.bash 而不 source 它获取 $VAR? 答: 不可以。 但是有几种可能解决办法。...调用 shell 上下文中执行脚本: $ cat set-vars1.sh export FOO=BAR $ . set-vars1.sh $ echo $FOO BAR 另一种方法是脚本打印设置环境变量命令.../set-vars2.sh)" $ echo "$FOO" BAR 终端上执行 help export 可以查看 Bash 内置命令 export 帮助文档: # help export export...-f 指 shell 函数 -n 从每个(变量)名称删除 export 属性 -p 显示所有导出变量函数列表 ---- 参考: stackoverflow question 16618071...help eval 相关阅读: 用不用export定义变量区别 shell编程$(cmd) `cmd` 之间有什么区别 ----

14620

自己动手写编译器:while,for,do等循环语句中间代码生成

,完成上面代码后,我们main.go实现包含while语句代码,这样就能运行上面代码并查看结果: func main() { source := `{int a; int b; int...代码运行后输出结果如下: 我们简单分析一下输出结果,从L4开始就是while循环体输出代码,L4对应语句就是while后面条件判断对应中间代码,它表明如果a >= 0 , b =0b <= 4都成立,那么就进入while循环体内部,从L6, L7可以看出他们确实是while循环体内两条语句对应中间代码,注意到L7还有一条goto L4语句,它表明循环体执行结束后再次调到循环体开头去对条件进行判断...(my_lexer) parser.Parse() } 最后我们看看运行结果: 我们分析一下结果,L4对应循环体内部if语句,如果b<2不成立,那么跳转到L8,可以看到L8对应正好是else

1.1K10

Antlr4 语法解析器(下)

; Action,行为,主要有@header @members,用来定义一些需要生成到目标代码行为,例如,可以通过@header设置生成代码package信息,@members可以定义额外一些变量到...Antlr4语法文件; Antlr4语法,支持关键字有:import, fragment, lexer, parser, grammar, returns, locals, throws, catch...看我们 3/ 4 是可以识别出来 语法 channel(HIDDEN) (代表隐藏通道) Token,不会被语法解析阶段处理,但是可以通过Token遍历获取到。...Parser,实际上表示了两个不同阶段: 词法分析阶段:对应于Lexer定义词法规则,解析结果为一个一个Token; 解析阶段:根据词法,构造出来一棵解析树或者语法树。...通过观察这棵树,我们可以发现针对我们SELECT语句,比较重要一个节点,是querySpecification节点,实际上,AstBuilder类,visitQuerySpecification

3.3K20

自己动手写编译器:实现if判断“||““&&“条件判断中间代码生成

但是上一节实现if条件判断比较简单,if()括号里面我们只支持一个算术表达式,事实上它可以通过”||””&&”运算符支持更加复杂表达式,也就是用这些运算符将多个表达式连接在一起,想每一个写过几行代码同学都会在...,编译器要先处理 a>b && c > d结果,然后再用这个表达式结果进行”||”运算,这种方法也是编译器确定运算符优先级时常用方法。...执行后生成中间代码如下: 在生成代码,需要我们注意是if语句生成代码,首先是if b > a goto L9,这里L9标签没有任何代码,因此进入L9后就会直接进入L8,而L8对应是给变量...接下来我们按照前面描述语法规则修改一下代码解析步骤,list-parser.go修改如下: func (s *SimpleParser) bool() inter.ExprInterface {...(source) parser := simple_parser.NewSimpleParser(my_lexer) parser.Parse() } 完成后运行起来所得结果如下:

68310

自己动手写编译器:增强语法极其实现

我们前面章节看到语法规则,语法只给出了代码字符串组合规则是否符合规定,实际上我们可以语法解析过程增加一些特定属性或者操作,使得语法解析流程中就能完成中间代码生成,或者是创建好特定元信息,以便在后续处理流程辅助代码生成...例如我们看看如何在语法解析规则附加特定操作,使得语法解析过程就能生成中间代码,我们看一个例子,给定如下语法规则: expr_prime -> + term {op('+');} expr_prime...首先在前dragon-compiler 项目中创建一个文件夹叫augmented_parser,该目录下创建新文件叫 augmented_parser.go,添加代码如下: package augmented_parser... main.go 调用上面实现代码测试一下效果: package main import ( "augmented_parser" "lexer" ) func main()...t1 可以看成生成虚拟指令确实能对应得上给定算术表达式,更详细调试演示过程请在 b 站搜索 coding 迪斯尼。

6810

Antlr实战之JSON解析器slowjson

为了对标阿里fastjson,给它起名 slowjson,源码已在github slowjson 欢迎star。为了推广slowjson,都想好广告词了。 你想升职加薪?...实际上你并不需要自己动手写词法分析器、语法分析器……,今天主角antlr都会帮你生成,你只需要用巴科斯范式把json语法规则描述清楚就行了,这份描述你可以直接在json.org找到,antlrgithub...解析,不过这里解析后结果是antlr内部封装抽象语法树,利用antlridea插件,我们可以将解析后AST可视化出来, "{\"key1\":\"value1\",\"sub\":{\"subkey...看到这里有没有发现slowjsonAPIfastjson很像! 没错,就是抄fastjson,而且还没抄全。。。...,之所以没提是因为JSONArrayJSONObject实现思路是非常相似的,而且简单多了,封装如下。

1.4K10

自己动手写数据库系统:实现一个小型SQL解释器(上)

解释器原理基于编译原理,B站上专门有视频解释编译原理算法,因此在这里不再赘述。...实现一个解释器首要步骤就是完成一个词法解析器,B站编译原理视频实现过一个小型编译器(dragon-compiler),因此将其对应词法解析器直接拿过来稍作改动,让其能对SQL代码进行词法解析...,请在B站搜索”coding迪斯尼”查看详细内容,下面我们调用上面实现代码试试效果,main.go添加如下测试代码: import ( "fmt" "lexer" ) func...这里我们采用自顶向下递归式解析法,具体算法过程可以参考b站编译原理视频。...工程中新建一个文件夹叫parser,然后再里面添加parser.go文件,为了简单起见,我们一次完成一小部分,然后调用完成代码看看结果是否正确,首先我们完成TERM这条规则解析,代码如下: package

36360

g++宏NULL究竟是什么?

g++宏NULL究竟是什么?.pdf NULL是个指针,还是个整数?0?或(void*)0?答案是g++版本有关。g++ 4.6支持C++11,引入了nullptr,也许会发生变化。...: NULL: 0 sizeof(NULL): 8 typeid(__null).name(): l typeid(0).name(): i 从输出结果可以看到NULL是long类型整数,定义应当是...(gdb) 从gdb跟踪结果,不难看到NULL真身是__null,但__null又是什么了?...,那么__null只能是g++内置定义,所以未出现在任何头文件,事实证明也如此,代码可以直接使用__null(尽管如此,但这个不是个好主意): #include #include int main...CTI_VOID_ZERO, CTI_NULL, CTI_MAX }; 查看文件cp/parser.c,parser.c是C/C++语法解析器实现文件: static tree cp_parser_primary_expression

1.1K30

自己动手写数据库系统:实现一个小型SQL解释器()

,然后是左括号,接着是一系列常量逗号组成序列,最后以又括号结尾,其他语法大家可以参照SQL相关命令来理解,下面我们看看代码实现,继续parser.go添加如下代码: func (p *SQLParser...(sql) sqlParser.UpdateCmd() } main,我们定义了一个create tablesql语句,然后调用UpdateCmd接口实现语法解析,大家可以b站搜索”...coding迪斯尼“,查看代码调试演示视频,由于上面语法解析逻辑稍微复杂繁琐,因此通过视频来跟踪代码单步调试过程才能更简单省力理解实现逻辑。...下面我们看看insert语句解析实现,parser.go添加代码如下: func (p *SQLParser) checkWordTag(wordTag lexer.Tag) { tok,...) sqlParser.UpdateCmd() } 请大家b站搜索coding迪斯尼,通过视频调试演示方式能更直白有效了解代码逻辑。

24050

Sweet Snippet 之 四则运算求值

本文简单介绍了一种四则运算求值实现方法(基于语法分析) 双栈算法可以实现四则运算求值,但是扩展性比较低,更好方式是基于语法分析来实现,整体大概包括以下几个步骤: 词法分析 语法分析 语法树生成...接着我们来定义一些用于进行词法分析辅助函数(结构): local token_map = { ['+'] = token_type.add, ['-'] = token_type.minus...,基本思路便是依次检查各个字符(中间会忽略空白字符),如果在 token_map 中有直接 token 映射则直接解析成功,否则就尝试 read_num,代码 result_values 则是用于记录数字类型实际数值...BNF 范式,有了这个范式,我们便可以据此直接(按递归下降方式)写出语法分析代码: local parser = {} function parser.parse_factor(lexer)...其实这个问题就引出了我们要介绍第三个话题:语法树生成.其实在上面的语法分析过程,我们不仅需要进行语法解析,还需要同时生成一颗对应抽象语法树,而之后四则运算求值就可以直接在这颗生成抽象语法树上进行

36420

自己动手写编译器:符号表及其实现

代码解析过程,一旦发现有变量定义出现时,编译器就构造一条符号记录,然后将其插入到符号表。...内部作用域对应符号表会有一个指针指向它上一层作用域符号表,解析内部作用域变量时,如果发现某个变量没有出现在其符号表,那么就顺着指针在上一层符号表查找,如果还是查找不到那么继续往上查找,如果到达最外层作用域...理论说太多容易糊涂,我们看看具体代码实现,Parser目录下新增symbol.go,添加如下代码: package parser type Symbol struct { VariableName...变量声明用可以分解成typeid组合,type 字符串”int” , “float”, “bool”, “char”等,id对应就是变量名,也就是identifier,stmts表示是多个表达式语句...) fmt.Print(":") fmt.Print(symbol.Type) return nil } 从上面代码可以看到,语法解析函数调用顺序基本上依照语法表达式描述

84020

修改第三方jar包里方法

作者在这里提供2种方法,有一种方法是工作老大给建议 1:思路 image.png 新建一个类jar包类方法一模一样,因为自己代码优先级高于maven依赖版本 参考网址:https...这里使用框架一样方式,使用xmlbean标签加入到xml <?...其实厚着脸皮承认其实都是工作老大给思路, 接下来是前方高能:作者自己思路 因为才毕业半年,接触到Java时就是springboot了,不喜欢xml文件,所以我要用注解 image.png...决定查看调用栈一探究竟 image.png image.png image.png image.png image.png 没错。他是根据url这个方法来获取类!...(其实这里还是有一个疑惑,因为重写方法返回还是/desinger,难到是因为优先级方法高?)

1.3K20

修改 jar 包

作者在这里提供2种方法,有一种方法是工作老大给建议 1:思路 image.png 新建一个类jar包类方法一模一样,因为自己代码优先级高于maven依赖版本 参考网址:https...这里使用框架一样方式,使用xmlbean标签加入到xml <?...其实厚着脸皮承认其实都是工作老大给思路, 接下来是前方高能:作者自己思路 因为才毕业半年,接触到Java时就是springboot了,不喜欢xml文件,所以我要用注解 image.png...决定查看调用栈一探究竟 image.png image.png image.png image.png image.png 没错。他是根据url这个方法来获取类!...(其实这里还是有一个疑惑,因为重写方法返回还是/desinger,难到是因为优先级方法高?)

4.4K20

初识HtmlParser

输出结果toString部分可以看到有一个"Rem (345[6,2],356[6,13]): 这是注释",就是一个RemarkNode。TextNode也很简单,就是用户可见文字信息。...对象 int getStartPosition ():取得这个NodeHTML页面起始位置 int getEndPosition ():取得这个NodeHTML页面结束位置 用于Filter...,开始遍历所以节点以前,beginParsing先被调用,然后处理中间Node,最后结束遍历以前,finishParsing被调用。...因为设置 recurseChildrenrecurseSelf都是false,所以Visitor没有访问子节点也没有访问根节点内容。...中间输出两个\n就是我们HTMLParser使用详解(1)- 初始化Parser讨论过最高层那两个换行。 我们先把recurseSelf设置成true,看看会发生什么。

61250

Fastjson < 1.2.68版本反序列化漏洞分析篇

除了之前放出来用于文件读写利用方式以外其实还可以用于SSRF。 一、漏洞概述 之前其他大佬文章,我们可以看到利用方式为通过清空指定文件向指定文件写入指定内容(用到第三方库)。...漏洞调试 从更新补丁可以看到expectClass类新增了三个方法分别为: java.lang.Runnable、java.lang.Readable、java.lang.AutoCloseable...总结 本次反序列化漏洞,笔者认为关键点在于找到合适并且可利用常用jar包gadget。...面试:知道 CopyOnWriteArrayList ? 居然还有人在用 System.out.println打日志? 不错秒杀系统架构分析与实战!...一个让你敲代码同时,找回童年乐趣 IntelliJ 插件 扫一扫,关注 一起学习,一起进步 每周赠书,福利不断 ﹀ ﹀ ﹀ 深度内容 推荐加入 最近热门内容回顾   #技术人系列

1.2K20

Sharding-Jdbc之读写分离导读 原

前言       Sharding-JDBC是一个开源分布式数据库中间件,它无需额外部署依赖,完全兼容JDBC各种ORM框架。...Sharding-JDBC作为面向开发微服务云原生基础类库,完整实现了分库分表、读写分离分布式主键功能,并初步实现了柔性事务。...MasterSlaveLoadBalanceAlgorithmType loadBalanceAlgorithmType; private String loadBalanceAlgorithmClassName; name独立读写分离模式...这两类都是对PreparedStatementSlaveStatement封装,提供了他们对应sql执行方法,两类执行方法都会调用Connection获取方式如下两行代码,最终执行jdbc本身实现...,详情可以查看源码 SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); Collection connections

1.3K30
领券