使用Pandas read_excel时出现print语法错误的原因排查
问题描述
使用Pandas 2.1.4版本执行以下代码读取Excel文件:
import pandas as pd data = pd.read_excel(r'C:\Users\davansh.gupta\Downloads\data.xlsx') data
触发了SyntaxError,错误信息如下:
{ "name": "SyntaxError", "message": "Missing parentheses in call to 'print'. Did you mean print(...)? (__init__.py, line 1187)", "stack": "Traceback \u001b[1;36m(most recent call last)\u001b[0m:\n\n\u001b[0m File \u001b[0;32m~\\AppData\\Roaming\\Python\\Python311\\site-packages\\IPython\\core\\interactiveshell.py:3550\u001b[0m in \u001b[0;35mrun_code\u001b[0m\n exec(code_obj, self.user_global_ns, self.user_ns)\u001b[0m\n\n\u001b[0m Cell \u001b[0;32mIn[2], line 1\u001b[0m\n data = pd.read_excel(r'C:/Users/davansh.gupta/Downloads/data.xlsx', sheet_name='with_npi')\u001b[0m\n\n\u001b[0m File \u001b[0;32mc:\\Python311\\Lib\\site-packages\\pandas\\io\\excel\\_base.py:504\u001b[0m in \u001b[0;35mread_excel\u001b[0m\n io = ExcelFile(\u001b[0m\n\n\u001b[0m File \u001b[0;32mc:\\Python311\\Lib\\site-packages\\pandas\\io\\excel\\_base.py:1550\u001b[0m in \u001b[0;35m__init__\u001b[0m\n if import_optional_dependency(\"xlrd\", errors=\"ignore\") is None:\u001b[0m\n\n\u001b[0m File \u001b[0;32mc:\\Python311\\Lib\\site-packages\\pandas\\compat\\_optional.py:132\u001b[0m in \u001b[0;35mimport_optional_dependency\u001b[0m\n module = importlib.import_module(name)\u001b[0m\n\n\u001b[0m File \u001b[0;32mc:\\Python311\\Lib\\importlib\\__init__.py:126\u001b[0m in \u001b[0;35mimport_module\u001b[0m\n return _bootstrap._gcd_import(name[level:], package, level)\u001b[0m\n\n\u001b[0m File \u001b[0;32m<frozen importlib._bootstrap>:1206\u001b[0m in \u001b[0;35m_gcd_import\u001b[0m\n\n\u001b[0m File \u001b[0;32m<frozen importlib._bootstrap>:1178\u001b[0m in \u001b[0;35m_find_and_load\u001b[0m\n\n\u001b[0m File \u001b[0;32m<frozen importlib._bootstrap>:1149\u001b[0m in \u001b[0;35m_find_and_load_unlocked\u001b[0m\n\n\u001b[0m File \u001b[0;32m<frozen importlib._bootstrap>:690\u001b[0m in \u001b[0;35m_load_unlocked\u001b[0m\n\n\u001b[0m File \u001b[0;32m<frozen importlib._bootstrap_external>:936\u001b[0m in \u001b[0;35mexec_module\u001b[0m\n\n\u001b[0m File \u001b[0;32m<frozen importlib._bootstrap_external>:1074\u001b[0m in \u001b[0;35mget_code\u001b[0m\n\n\u001b[0m File \u001b[0;32m<frozen importlib._bootstrap_external>:1004\u001b[0m in \u001b[0;35msource_to_code\u001b[0m\n\n\u001b[1;36m File \u001b[1;32m<frozen importlib._bootstrap>:241\u001b[1;36m in \u001b[1;35m_call_with_frames_removed\u001b[1;36m\n\n\u001b[1;36m File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\xlrd\\__init__.py:1187\u001b[1;36m\u001b[0m\n\u001b[1;33m print \"EXTERNSHEET(b7-):\"\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m Missing parentheses in call to 'print'. Did you mean print(...)?\n" }
代码无其他关联程序,为何读取Excel操作会引发此print语法错误?
问题原因
这是因为你安装的xlrd版本为仅支持Python 2的旧版本,而当前使用的是Python 3.11环境。Python 3中print是必须带括号的函数,而Python 2中print是无需括号的语句,旧版xlrd的代码采用Python 2语法,导致在Python 3环境下导入xlrd模块时直接触发语法错误。
解决方案
- 升级xlrd到支持Python 3的版本:
先卸载旧版xlrd:
再安装2.0.0及以上版本:pip uninstall xlrdpip install xlrd>=2.0.0 - 改用openpyxl读取xlsx文件(若你的Excel为.xlsx格式):
先安装openpyxl:
然后在读取时指定引擎:pip install openpyxl
也可直接卸载xlrd,Pandas会自动使用已安装的openpyxl处理xlsx格式文件。import pandas as pd data = pd.read_excel(r'C:\Users\davansh.gupta\Downloads\data.xlsx', engine='openpyxl')
内容的提问来源于stack exchange,提问作者Devansh Gupta
相关产品推荐
相关产品推荐

