Python问题:打开和关闭文件会返回语法错误

时间:2011-05-18 13:35:30

标签: python syntax

大家好,我已经发布了这个有用的python脚本,可以让我从网站上获取一些天气数据。 我将创建一个文件和数据集。

有些东西不起作用。它返回此错误。

File "<stdin>", line 42
     f.close()
     ^
SyntaxError: invalid syntax

怎么了?在这一行我只关闭文件! 有人可以帮帮我吗?

这是python代码。

import urllib2
from BeautifulSoup import BeautifulSoup
# Create/open a file called wunder.txt (which will be a comma-delimited file)
f = open('wunder-data.txt', 'w')
# Iterate through year, month, and day
for y in range(1980, 2007):
  for m in range(1, 13):
    for d in range(1, 32):
      # Check if leap year
      if y%400 == 0:
        leap = True
      elif y%100 == 0:
        leap = False
      elif y%4 == 0:
        leap = True
      else:
        leap = False
      # Check if already gone through month
      if (m == 2 and leap and d > 29):
        continue
      elif (m == 2 and d > 28):
        continue
      elif (m in [4, 6, 9, 10] and d > 30):
        continue
      # Open wunderground.com url
      url = "http://www.wunderground.com/history/airport/KBUF/"+str(y)+ "/" + str(m) + "/" + str(d) + "/DailyHistory.html"
      page = urllib2.urlopen(url)
      # Get temperature from page
      soup = BeautifulSoup(page)
      dayTemp = soup.body.nobr.b.string
      # Format month for timestamp
      if len(str(m)) < 2:
        mStamp = '0' + str(m)
      else:
        mStamp = str(m)
      # Format day for timestamp
      if len(str(d)) < 2:
        dStamp = '0' + str(d)
      else:
        dStamp = str(d)
      # Build timestamp
      timestamp = str(y) + mStamp + dStamp
      # Write timestamp and temperature to file
      f.write(timestamp + ',' + dayTemp + '\n')
# Done getting data! Close file.
f.close()

5 个答案:

答案 0 :(得分:3)

看起来你有一个空白问题。检查文件的空白 - 查看空格和制表符的位置。如果文件中有选项卡和空格,请将它们全部转换为空格。

f.close应与f = open('wunder-data.txt', 'w')

处于同一缩进级别

答案 1 :(得分:0)

f.close()的行不是第42行,所以你确定这是给出错误的代码吗?

另外,Python似乎处理了stdin收到的程序,这是你的意图吗?

答案 2 :(得分:0)

删除代码中的行,直到语法错误消失。然后你就可以缩小问题范围了。

答案 3 :(得分:0)

我刚才有一个类似的错误,显示3.8中的语法错误。事实证明,我的语法错误是突出显示的行上方的代码中缺少右括号。因此,第42行不是问题推杆应查看的内容。也许,实际上是代码上方的某个语法错误。

答案 4 :(得分:-1)

到2020年(10月),我遇到了同样的问题,我只是检查了close()函数上方的代码。我发现我之前没有关上支架。因此错误是在函数上方的代码中,而不是指定的实际行中。