python – 语法错误和运行时错误有什么区别?

例如:
def tofloat(i): 
    return flt(i)

def addnums(numlist):
    total = 0
    for i in numlist:
        total += tofloat(i)
    return total

nums = [1,2,3]
addnums(nums)

flt应该是float,但我很困惑它是语法错误还是运行时错误.

解决方法

实际上,这是一个运行时错误,因为Python会尝试在运行时解析flt名称(因为它是一种动态语言),并且它不会找到它.当发生这种情况时,Python会产生异常并说它无法找到您使用flt的符号,所有这些都在运行时发生.

当解释器发现使用Python语法不具吸引力的东西时,会发生语法错误.例如:Python的语法不能将输入语法识别为有效的Python程序.这可能发生在:

>您忘记添加:在if,def,class等结尾处
>你忘了关闭一些括号或括号等.
>当你不遵守python的语法时很多地方:)

在您的示例中,语法没有任何问题.对于解释器,flt(i)是一个非常有效的flt方法调用,如果它确实存在,必须在运行时在运行时检查.因此,口译员不会抱怨并且您的问题的语法是好的.

实际上,这可以被视为比C#,C等编译语言更不利.这种错误可以在编译时更快地检测到,并且编译器在找到它时会尖叫,所以你可以注意到它.

使用动态语言,在调用实际方法之前,您不会注意到这一点.你的程序很简单,所以你可以快速找到它.但是,浮点数中缺少的o是在类的子类的子类中的一些遗留框架内,作为属性,在其他模块内部等等.这将是苛刻的:)

更新:如果您了解Python内部的工作原理,Python的文档中的The execution model一个很好的读物.这将进一步澄清你的疑问,并会给你很多知识:)

希望这可以帮助!

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...