【问题标题】:error invalid syntax (__init__.py) working with beautiful soup [duplicate]错误无效语法(__init__.py)使用漂亮的汤[重复]
【发布时间】:2013-11-24 12:12:25
【问题描述】:

我想编写一个从站点内容创建 html 文件的简单代码。我正在使用beautifulsoup 4 库。当创建 BeautifulSoup 对象时:

BeautifulSoup('<html></html>')

我收到此错误:

语法无效(init.py,第 175 行)

这行出错了:

从 bs4 导入 BeautifulSoup

我通过执行setup.py安装了库。

有什么问题?

我的整个代码:

import urllib.request as req
from bs4 import BeautifulSoup

def main():
    get_announcements("92-93", 1, 153, 12)

def get_announcements(year, term, courseID, group):
    website = req.urlopen('http://ce.sharif.edu/courses/' + year + '/' + str(term) + '/ce' + str(courseID) + '-' + str(group) + '/')
    site_content = website.readall()

    soup = BeautifulSoup('<html></html>')

if __name__ == '__main__':
    main()

和库文件中 init.py 中的错误行:

try:
    is_file = os.path.exists(possible_filename)
except Exception, e:   #ERROR!!
    # This is almost certainly a problem involving
    # characters not valid in filenames on this
    # system. Just let it go.
    pass

【问题讨论】:

  • 能否也提供第 174 行?
  • 还应该有一个抑扬符指向出现错误的行中的点:请始终复制并粘贴完整的确切错误,而不是解释它。很可能,尽管您之前的行上有一个未闭合的括号。
  • @Duncan 确切的错误就是我上面所说的。请看编辑部分
  • @0xc0de:请看编辑部分
  • 我在您编辑后恢复了我的 -1,但您仍然可以通过复制粘贴错误使其更清晰(并且更容易获得解决方案)。您还可以将行号添加到已编辑的部分。新添加的部分似乎并没有引发任何错误,因为它掩盖了 all 错误!您确定错误来自此文件/模块吗?

标签: python beautifulsoup syntax-error python-import


【解决方案1】:

您并没有让这件事变得太容易,但我认为您发布的信息足以解决您的问题。

import urllib.request as req

这条线只有在你使用 Python 3.x 时才有效。既然你越过了这条线,我会假设是这种情况。

except Exception, e:

此行使用 Python 2.x 语法。您似乎正试图在 Python 3.x 程序中导入 Python 2.x 库。那是行不通的。在 Python 3 中,except 子句具有这种语法(因此您需要 as 而不是逗号):

("except" [expression ["as" target]] ":" suite)+

只是为了验证一下,如果我的假设是正确的,那么语法错误应该表明逗号是产生问题的实际字符。

我不知道为什么会发生这种情况。我刚刚使用pip install BeautifulSoup4 安装了 bs4,并且刚刚为我安装的版本中的代码在第 175 行是:

        try:
            is_file = os.path.exists(possible_filename)
        except Exception as e:
            # This is almost certainly a problem involving
            # characters not valid in filenames on this
            # system. Just let it go.
            pass

这会起作用。

【讨论】:

  • BeautifulSoup 4 使用 build_py_2to3 创建 Python 3 代码库;如果出现此异常,则 OP 正在尝试运行 原始压缩包,而不是转换后的代码库。
【解决方案2】:

我能够在 Mac OSX 10.10.1 上重现此问题,该 Mac OSX 10.10.1 具有随 OSX 分发的原始 Python 2.7.6 和 3.4.2 上的 Python IDLE。使用后

python3 setup.py install 

我得到了同样的错误:

>>> import bs4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Applications/Python 3.4/beautifulsoup4-4.3.2/bs4/__init__.py", line 175
    except Exception, e:
                    ^
SyntaxError: invalid syntax

安装程序可能正在读取位于 /Library/Python/2.7/site-packages/ 的默认安装目录,并假设 BeautifulSoup 将在 Python 2.7 上运行。看起来像是设置中的错误。

【讨论】:

  • 您实际上并没有使用已安装的 BeautifulSoup 包。您正在运行的代码是源 tarball。您不应该将下载的源代码添加到您的路径中; python3 setup.py install翻译的代码复制到您的站点包中。
【解决方案3】:

解决办法可以在here找到。

问题是您下载的模块是用 python 版本 2 编写的,它的语法与您在计算机上安装的 python 版本(版本 3)不兼容。

要解决此问题,请使用位于 ...\Python34\Tools\Scripts手动将bs4目录(...\beautifulsoup4-4.3.2\bs4)中的每个python文件从版本2转换为版本3。

例如打字

'C:\Python34\Tools\Scripts\2to3.py ...\beautifulsoup4-4.3.2\bs4\__init__.py'

进入命令提示符会将__init__.py 文件从版本 2 转换为版本 3。

【讨论】:

  • BeautifulSoup 安装程序的 setup.py 已经解决了这个问题。无需手动操作。
猜你喜欢
  • 1970-01-01
  • 2015-08-19
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多