微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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一个很好的读物.这将进一步澄清你的疑问,并会给你很多知识:)

希望这可以帮助!

原文地址:https://www.jb51.cc/python/186084.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐