我浏览了这段代码并删除了所有标签,替换为空格。我一直在 文件" xxxx",第14行除外: IndentationError:unindent与任何外部缩进级别都不匹配
任何人都可以看到其他任何问题吗?
### colorize_svg.py
import csv
from BeautifulSoup import BeautifulSoup
# Read in unemployment rates
unemployment = {}
min_value = 100; max_value = 0
reader = csv.reader(open('unemployment09.csv'), delimiter=",")
for row in reader:
try:
full_fips=row[1]+row[2]
rate=float(row[8].strip())
unemployment[full_fips]=rate
except:
pass
# Load the SVG map
svg = open('counties.svg', 'r').read()
# Load into Beautiful Soup
soup = BeautifulSoup(svg, selfClosingTags=['defs','sodipodi:namedview'])
# Find counties
paths = soup.findAll('path')
# Map colors
colors = ["#D73027", "#FC8D59", "#FEE090", "#E0F3F8", "#91BFDB", "#4575B4"]
# County style
path_style = 'font-size:12px;fill-rule:nonzero;stroke:#FFFFFF;stroke-opacity:1; stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:butt;marker-start:none;stroke-linejoin:bevel;fill:'
# Color the counties based on unemployment rate
for p in paths:
if p['id'] not in ["State_Lines", "separator"]:
# pass
try:
rate = unemployment[p['id']]
except:
continue
if rate > 10:
color_class = 5
elif rate > 8:
color_class = 4
elif rate > 6:
color_class = 3
elif rate > 4:
color_class = 2
elif rate > 2:
color_class = 1
else:
color_class = 0
color = colors[color_class]
p['style'] = path_style + color
print soup.prettify()
答案 0 :(得分:2)
两件事:
你的第一个for循环似乎在主体上有一个额外的标识级别,但这个可能是复制/粘贴的问题。
和
# Find counties
paths = soup.findAll('path')
# Map colors
colors = ["#D73027", "#FC8D59", "#FEE090", "#E0F3F8", "#91BFDB", "#4575B4"]
# County style
path_style = 'font-size:12px;fill-rule:nonzero;stroke:#FFFFFF;stroke-opacity:1; stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:butt;marker-start:none;stroke-linejoin:bevel;fill:'
正如您在此处所见,path_style应与颜色对齐。这可能就是你的错误所在。
答案 1 :(得分:1)
您的缩进错误很可能是因为没有用空格替换每个制表符。它经常发生在我身上 - 只需再次检查并确认没有标签。
答案 2 :(得分:1)
当我将代码粘贴到Python中时,它只会出现一个IndentationError - at:
# County style
path_style = 'font-size:12px;fill-rule:nonzero;stroke:#FFFFFF;stroke-opacity:1; stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:butt;marker-start:none;stroke-linejoin:bevel;fill:'
哪个不应缩进,因此会给你看到的一个稍微不同的错误(“意外缩进”)。
这意味着您看到的IndentationError必须由多个制表符和空格混合引起,在代码和StackOverflow之间复制和粘贴时不会保留这些选项卡。第14行是top for for循环中的except:
- 您会发现它和与之关联的try
具有不同的制表符和空格组合。
可以对此进行各种修复 - 例如,您可以从try:
和except:
的前面删除缩进,并使用统一缩进替换(对于它们两者,请按Tab键一次,确保您设置或取消设置制表符到空格以匹配文件其余部分中使用的样式。但更简单的方法是将问题中的代码复制并粘贴回.py文件中。
答案 3 :(得分:0)
在编辑器中检查您的代码,该编辑器允许您查看隐藏的空格和制表符。混合标签和空格给我带来了很多这样的问题 - 只坚持一种形式的缩进。