2024-09-24 10:27:59 发布
网友
例如:
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,但是我搞不清它是语法错误还是运行时错误。
flt
float
你有一个NameError,你的代码应该是:
NameError
def tofloat(i): return float(i)
Python中没有flt方法,这就是它不适合您的原因。
顺便说一下,您真的不需要将浮点转换包装到函数中,整个代码可以写成:
def addnums(numlist): return sum(map(float, numlist))
使用它:
>>> addnums(range(4)) 6.0
实际上,这是一个运行时错误,因为Python将在运行时尝试解析flt名称(因为它是一种动态语言),但找不到它。当这种情况发生时,Python会产生异常,说它找不到您正在使用的符号flt,而所有这些都在运行时发生。
当解释器发现一些与Python语法不符的东西时,就会出现语法错误。例如:Python的语法无法将输入语法识别为有效的Python程序。这可能发生在:
if, def, class
:
在你的例子中,语法没有错。对于解释器来说,flt(i)是对flt方法的非常有效的调用,如果该方法确实存在,则必须在运行时在作用域内进行检查。所以解释器不会抱怨,你的问题的语法也很好。
flt(i)
对于动态语言,在调用实际方法之前不会注意到这一点。你的程序很简单,所以你可能会发现它很快。但是,float中缺少的o在某个类的子类中的某个遗留框架中,作为属性,在其他模块中,等等,这会很苛刻:)
o
更新:The execution model在Python的文档中,如果您了解Python内部是如何工作的,那么这是一本很好的读物。这将进一步澄清您的疑问,并为您提供大量的知识:)
希望这有帮助!
SyntaxError由解析器在发现语法不正确时引发,例如缺少冒号、括号、无效语句等。在不解决此问题之前,它不允许您执行代码。
您的代码将只在运行时抛出错误,即首次调用函数tofloat(i)时抛出错误,因此这是一个运行时错误。特别是NameError。
tofloat(i)
另外,运行时错误不会停止程序的执行,直到错误部分没有执行为止。因此,如果不调用tofloat,代码实际上可以正常运行。
tofloat
下面的代码在第三行正确执行,但在引发NameError时停止。(运行时错误)
print 1 print 2 print 3 print foo
输出:
1 2 3 Traceback (most recent call last): File "so.py", line 4, in <module> print foo NameError: name 'foo' is not defined
这段代码不会在我们生成SyntaxError时执行,即使前3行完全正确:
SyntaxError
print 1 print 2 print 2 print (foo
$ python so.py File "so.py", line 5 ^ SyntaxError: invalid syntax
注意,python中还有一个RunTimeError,当检测到不属于任何其他类别的错误时,会引发这个问题
RunTimeError
你有一个
NameError
,你的代码应该是:Python中没有
flt
方法,这就是它不适合您的原因。顺便说一下,您真的不需要将浮点转换包装到函数中,整个代码可以写成:
使用它:
实际上,这是一个运行时错误,因为Python将在运行时尝试解析
flt
名称(因为它是一种动态语言),但找不到它。当这种情况发生时,Python会产生异常,说它找不到您正在使用的符号flt
,而所有这些都在运行时发生。当解释器发现一些与Python语法不符的东西时,就会出现语法错误。例如:Python的语法无法将输入语法识别为有效的Python程序。这可能发生在:
if, def, class
等表达式的末尾添加:
在你的例子中,语法没有错。对于解释器来说,
实际上,这可以被看作是<> E>编译语言flt(i)
是对flt
方法的非常有效的调用,如果该方法确实存在,则必须在运行时在作用域内进行检查。所以解释器不会抱怨,你的问题的语法也很好。对于动态语言,在调用实际方法之前不会注意到这一点。你的程序很简单,所以你可能会发现它很快。但是,
float
中缺少的o
在某个类的子类中的某个遗留框架中,作为属性,在其他模块中,等等,这会很苛刻:)更新:The execution model在Python的文档中,如果您了解Python内部是如何工作的,那么这是一本很好的读物。这将进一步澄清您的疑问,并为您提供大量的知识:)
希望这有帮助!
SyntaxError由解析器在发现语法不正确时引发,例如缺少冒号、括号、无效语句等。在不解决此问题之前,它不允许您执行代码。
您的代码将只在运行时抛出错误,即首次调用函数
tofloat(i)
时抛出错误,因此这是一个运行时错误。特别是NameError
。另外,运行时错误不会停止程序的执行,直到错误部分没有执行为止。因此,如果不调用
tofloat
,代码实际上可以正常运行。下面的代码在第三行正确执行,但在引发
NameError
时停止。(运行时错误)输出:
这段代码不会在我们生成
SyntaxError
时执行,即使前3行完全正确:输出:
注意,python中还有一个
RunTimeError
,当检测到不属于任何其他类别的错误时,会引发这个问题相关问题 更多 >
编程相关推荐