Google Colab中input函数报错Element对象不可调用,是Bug还是操作问题?
解决TypeError: 'xml.etree.ElementTree.Element' object is not callable问题
问题详情
在Google Colab中运行Python代码时触发TypeError,提示内置函数input()被识别为ET.Element对象,但代码中并未显式定义过名为input的变量。
运行代码
import xml.etree.ElementTree as ET import urllib.request,urllib.parse,urllib.error u=input('Enter Location:') print("Retirieving ",u) uh = urllib.request.urlopen(u) data = uh.read() print("Retrieved",len(data),"characters") tree=ET.fromstring(data) sum=0 c=0 counts = tree.findall('.//count') for val in counts: sum+=int(val.text) c+=1 print("Count:",c) print("Sum:",sum)
错误信息
TypeError Traceback (most recent call last) <ipython-input-19-af23c96a0ad5> in <module> 2 import urllib.request,urllib.parse,urllib.error 3 ----> 4 u=input('Enter Location:') 5 print("Retirieving ",u) 6 TypeError: 'xml.etree.ElementTree.Element' object is not callable
原因分析
Google Colab的交互式环境中全局变量跨单元格共享。你之前运行的某个单元格可能意外创建了名为input的变量,并将其赋值为xml.etree.ElementTree.Element类型对象,覆盖了Python内置的input()函数。即使当前代码未定义input,之前的命名空间污染依然会影响当前代码执行。
解决方法
方法一:重启运行时
点击Colab顶部菜单栏Runtime->Restart runtime,清空所有全局变量,恢复内置input()函数的默认功能,之后重新运行当前代码即可。方法二:显式恢复内置函数
在当前代码开头添加一行代码,强制将input指向内置函数:input = __builtins__.input修改后的完整代码:
input = __builtins__.input import xml.etree.ElementTree as ET import urllib.request,urllib.parse,urllib.error u=input('Enter Location:') print("Retirieving ",u) uh = urllib.request.urlopen(u) data = uh.read() print("Retrieved",len(data),"characters") tree=ET.fromstring(data) sum=0 c=0 counts = tree.findall('.//count') for val in counts: sum+=int(val.text) c+=1 print("Count:",c) print("Sum:",sum)
内容的提问来源于stack exchange,提问作者Aaryan Joshi
相关产品推荐
相关产品推荐

