Linux环境下Python CSV下载显示代码第23行语法错误求助
问题:Python代码第23行语法错误,无法下载CSV文件
在Linux系统中运行以下Python代码下载并显示CSV文件时,第23行出现语法错误。出于隐私考虑,已移除认证相关信息:
import csv import urllib.request # URL of the CSV file url = 'http://165.143.226.108/groups/IPNET-Localpeering/topN/IPNET-Localpeering/IPNET-Localpeering.csv' # Proxy server details # Create a password manager and add the username and password password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() password_mgr.add_password(None, url, username, password) # Create an authentication handler for the proxy server proxy_auth_handler = urllib.request.HTTPBasicAuthHandler() proxy_auth_handler.add_password('realm', f'http://{proxy_server}:{proxy_port}', proxy_username, proxy_password) # Create a proxy handler and opener proxy_handler = urllib.request.ProxyHandler({'http': f'http://{proxy_server}:{proxy_port}', 'https': f'https://{proxy_server}:{proxy_port}'}) opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler, urllib.request.HTTPHandler) # Install the opener urllib.request.install_opener(opener) # Download the CSV file from the URL response = urllib.request.urlopen(url) data = response.read().decode('utf-8') # Parse the CSV data csv_data = csv.reader(data.splitlines()) # Print each row of the CSV file for row in csv_data: print(row)
错误原因分析
第23行使用了f-string格式化语法(f'http://{proxy_server}:{proxy_port}'),该语法仅在Python 3.6及以上版本支持。如果你的Linux系统默认Python版本低于3.6,运行时就会触发语法错误。另外,代码中用到的username、password、proxy_server等变量未定义(你移除了隐私信息),但这属于运行时错误,不是语法错误,所以核心问题是f-string的版本兼容性。
修复方案
方案1:升级Python版本到3.6+
在Linux终端执行以下命令查看当前Python版本:
python --version # 或 python3 --version
如果版本低于3.6,可通过包管理器升级(以Ubuntu为例):
sudo apt update sudo apt install python3.8
方案2:替换f-string为兼容的格式化方式
将所有f-string替换为str.format()语法,适配低版本Python:
# 原代码第23-24行替换为: proxy_auth_handler.add_password('realm', 'http://{}:{}'.format(proxy_server, proxy_port), proxy_username, proxy_password) # 原代码第27-28行替换为: proxy_handler = urllib.request.ProxyHandler({'http': 'http://{}:{}'.format(proxy_server, proxy_port), 'https': 'https://{}:{}'.format(proxy_server, proxy_port)})
方案3:补充缺失的变量定义
在代码中添加已移除的认证和代理变量定义,例如:
# 补充认证信息 username = '你的用户名' password = '你的密码' # 补充代理服务器信息 proxy_server = '代理服务器地址' proxy_port = '代理端口' proxy_username = '代理用户名' proxy_password = '代理密码'
内容的提问来源于stack exchange,提问作者Otshepeng Ditshego
相关产品推荐
相关产品推荐

