python 的 except 块可以同时有 2 个条件吗?

Can an except block of python have 2 conditions simultaneously?

我试图借助这个 github project 学习股票预测。但是当我 运行 通过 cmd 在存储库中给出 main.py 文件时。我遇到错误

File "/Stock-Predictor/src/tweetstream/streamclasses.py", line 101
    except urllib2.HTTPError, exception:
                            ^
SyntaxError: invalid syntax

下面给出的代码是名为 tweetstream 的 PyPi 模块的一部分,即命名为 tweetstream/streamclasses.py。在 Twitter 情绪分析项目中实施时出现错误

import time
import urllib
import urllib2
import socket
from platform import python_version_tuple
import anyjson

from . import AuthenticationError, ConnectionError, USER_AGENT 

class BaseStream(object):
    """A network connection to Twitters streaming API
    :param username: Twitter username for the account accessing the API.
    :param password: Twitter password for the account accessing the API.
    :keyword count: Number of tweets from the past to get before switching to
      live stream.
    :keyword url: Endpoint URL for the object. Note: you should not
      need to edit this. It's present to make testing easier.
    .. attribute:: connected
        True if the object is currently connected to the stream.
    .. attribute:: url
        The URL to which the object is connected
    .. attribute:: starttime
        The timestamp, in seconds since the epoch, the object connected to the
        streaming api.
    .. attribute:: count
        The number of tweets that have been returned by the object.
    .. attribute:: rate
        The rate at which tweets have been returned from the object as a
        float. see also :attr: `rate_period`.
    .. attribute:: rate_period
        The amount of time to sample tweets to calculate tweet rate. By
        default 10 seconds. Changes to this attribute will not be reflected
        until the next time the rate is calculated. The rate of tweets vary
        with time of day etc. so it's useful to set this to something
        sensible.
    .. attribute:: user_agent
        User agent string that will be included in the request. NOTE: This can
        not be changed after the connection has been made. This property must
        thus be set before accessing the iterator. The default is set in
        :attr: `USER_AGENT`.
    """

    def __init__(self, username, password, catchup=None, url=None):
        self._conn = None
        self._rate_ts = None
        self._rate_cnt = 0
        self._username = username
        self._password = password
        self._catchup_count = catchup
        self._iter = self.__iter__()

        self.rate_period = 10  # in seconds
        self.connected = False
        self.starttime = None
        self.count = 0
        self.rate = 0
        self.user_agent = USER_AGENT
        if url: self.url = url

    def __enter__(self):
        return self

    def __exit__(self, *params):
        self.close()
        return False

    def _init_conn(self):
        """Open the connection to the twitter server"""
        headers = {'User-Agent': self.user_agent}

        postdata = self._get_post_data() or {}
        if self._catchup_count:
            postdata["count"] = self._catchup_count

        poststring = urllib.urlencode(postdata) if postdata else None
        req = urllib2.Request(self.url, poststring, headers)

        password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
        password_mgr.add_password(None, self.url, self._username, self._password)
        handler = urllib2.HTTPBasicAuthHandler(password_mgr)
        opener = urllib2.build_opener(handler)

        try:
            self._conn = opener.open(req)

        except urllib2.HTTPError, exception:  #___________________________problem here
            if exception.code == 401:
                raise AuthenticationError("Access denied")
            elif exception.code == 404:
                raise ConnectionError("URL not found: %s" % self.url)
            else:  # re raise. No idea what would cause this, so want to know
                raise
        except urllib2.URLError, exception:
            raise ConnectionError(exception.reason)

except中的第二项是异常的body中使用的标识符,用于访问异常信息。 try/except 语法在 Python 2 和 Python 3 之间发生了变化,您的代码是 Python 2 语法。

Python 2 (language reference):

try:
    ...
except <expression>, <identifier>:
    ...

Python 3 (language reference, rationale):

try:
    ...
except <expression> as <identifier>:
    ...

请注意,可以是单个异常 class 或异常元组 classes 以在单个 except 子句中捕获多种类型,因此请回答您的标题问题您可以使用以下方法来处理多个可能抛出的异常:

try:
    x = array[5]  # NameError if array doesn't exist, IndexError if it is too short
except (IndexError,NameError) as e:
    print(e)  # which was it?

使用...

Try: #code here

Except MyFirstError: #exception handling

Except AnotherError: #exception handling

你可以重复多次