加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:24:33 所属栏目:Python 来源:网络整理
导读:例如: def tofloat(i): return flt(i)def addnums(numlist): total = 0 for i in numlist: total += tofloat(i) return totalnums = [1,2,3]addnums(nums) flt应该是float,但我很困惑它是语法错误还是运行时错误. 解决方法 实际上,这是一个运行时错误,因为P
例如:
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是一个很好的读物.这将进一步澄清你的疑问,并会给你很多知识:)

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读