Python代码报错:positional argument follows keyword argument 解决方法
解决Python中
positional argument follows keyword argument错误(NetworkX构建有向图场景) 嘿,我来帮你拆解下这个错误的根源和解决办法:
错误直接原因
你在调用pd.read_csv()时参数顺序出问题了!看报错的那行代码:
for d in pd.read_csv("politwi.csv",sep='\s+',"shift-jis", header=None, names=['A', 'B'], chunksize=10000,):
这里的"shift-jis"是用来指定文件编码的参数,但你没写对应的关键字encoding=,导致它变成了位置参数。而Python的语法规则是:位置参数不能放在关键字参数之后(sep='\s+'就是关键字参数),所以直接触发了SyntaxError。
完整修正步骤
除了编码参数的问题,你的代码还有几个小细节需要调整,我一起整理出来:
- 补充pandas导入:你用到了
pd.read_csv()但没导入pandas,得补上这行 - 修正read_csv参数:给编码值加上
encoding=关键字,让参数规则符合Python要求 - 修正print语句:Python3里
print是函数,必须加括号(你原来的print pos是Python2的写法) - 规范代码缩进:Python对缩进要求严格,循环体和函数调用要保证缩进正确
修正后的完整代码
import numpy as np import pandas as pd # 补充pandas导入 import networkx as nx import matplotlib.pyplot as plt G = nx.DiGraph() # 修正encoding参数的写法,确保参数顺序合规 for d in pd.read_csv("politwi.csv", sep='\s+', encoding="shift-jis", header=None, names=['A', 'B'], chunksize=10000): G.add_edges_from([tuple(x) for x in d.values]) # 修正print语句的语法 for e in G.edges(): print(e) pos = nx.spring_layout(G, scale=1) nx.draw(G, pos, with_labels=True) plt.savefig('this.png') plt.show()
额外注意点
- 确认你的
politwi.csv确实是用空格分隔的(sep='\s+'),如果是逗号分隔,改成sep=','即可 encoding="shift-jis"是日文编码,如果你后续读取文件出现乱码,可以尝试换成encoding="utf-8"或者其他匹配文件实际编码的值
内容的提问来源于stack exchange,提问作者Seiya Namba
相关产品推荐
相关产品推荐

