Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python尝试…除了逗号vs';as';除了_Python_Python 2.6 - Fatal编程技术网

Python尝试…除了逗号vs';as';除了

Python尝试…除了逗号vs';as';除了,python,python-2.6,Python,Python 2.6,except语句中的“,”和“as”有什么区别,例如: try: pass except Exception, exception: pass 以及: 2.6中的第二种语法合法吗?它在Windows上的CPython 2.6中工作,但cygwin中的2.5解释器抱怨它无效 如果它们在2.6中都有效,我应该使用哪一种?首选“as”语法,但是如果您的代码需要使用较旧的Python版本(2.6是第一个支持新版本),则需要使用逗号语法。首选“as”语法,但是,如果您的代码需要使用较旧的

except语句中的“,”和“as”有什么区别,例如:

try:
    pass
except Exception, exception:
    pass
以及:

2.6中的第二种语法合法吗?它在Windows上的CPython 2.6中工作,但cygwin中的2.5解释器抱怨它无效


如果它们在2.6中都有效,我应该使用哪一种?

首选“as”语法,但是如果您的代码需要使用较旧的Python版本(2.6是第一个支持新版本),则需要使用逗号语法。

首选“as”语法,但是,如果您的代码需要使用较旧的Python版本(2.6是第一个支持新版本的版本),那么您需要使用逗号语法。

最终文档是

总结:

  • 在Python3.x中,需要使用
    as
    为变量分配异常
  • 在Python2.6+中,使用
    作为
    语法,因为它不那么模棱两可,并且与Python3.x向前兼容
  • 在Python2.5及更早版本中,使用逗号版本,因为不支持
    as

最终文件是

总结:

  • 在Python3.x中,需要使用
    as
    为变量分配异常
  • 在Python2.6+中,使用
    作为
    语法,因为它不那么模棱两可,并且与Python3.x向前兼容
  • 在Python2.5及更早版本中,使用逗号版本,因为不支持
    as

    • 是的,这是合法的。我正在运行Python 2.6

      try:
          [] + 3
      except Exception as x:
          print "woo hoo"
      
      >>> 
      woo hoo
      
      更新:使用
      作为
      语法还有另一个原因。正如其他人指出的那样,使用
      会使事情变得更加模棱两可;这就是区别所在。从Python2.6开始,就有了
      multicatch
      ,它允许您执行以下操作。在这种情况下,这样说更富有表现力,也更像蟒蛇

      except (exception1, exception2) as e
      
      而不是说

      except (exception1, exception2), e
      

      这仍然有效

      是的,这是合法的。我正在运行Python 2.6

      try:
          [] + 3
      except Exception as x:
          print "woo hoo"
      
      >>> 
      woo hoo
      
      更新:使用
      作为
      语法还有另一个原因。正如其他人指出的那样,使用
      会使事情变得更加模棱两可;这就是区别所在。从Python2.6开始,就有了
      multicatch
      ,它允许您执行以下操作。在这种情况下,这样说更富有表现力,也更像蟒蛇

      except (exception1, exception2) as e
      
      而不是说

      except (exception1, exception2), e
      

      如果要支持所有python版本,可以使用如下函数使用
      sys.exc_info()
      ,该函数仍然有效:

      try:
          a = 1/'0'
      except (ZeroDivisionError, TypeError):
          e = sys.exc_info()[1]
          print(e.args[0])
      

      (来源:)

      如果您想支持所有python版本,可以使用以下函数:

      try:
          a = 1/'0'
      except (ZeroDivisionError, TypeError):
          e = sys.exc_info()[1]
          print(e.args[0])
      
      (来源:)

      从Python 3.7(不确定其他版本)起,“逗号”语法不再受支持:

      源文件
      异常\u逗号.py

      try:
          result = 1/0
      except Exception, e:
          print("An error occurred")
          exit(1)
      
      exit(0)
      
      • $python--版本-->python 2.7.10
      • $python3--version-->Python 3.7.2
      从Python 3.7(不确定其他版本)起,“逗号”语法不再受支持:

      源文件
      异常\u逗号.py

      try:
          result = 1/0
      except Exception, e:
          print("An error occurred")
          exit(1)
      
      exit(0)
      
      • $python--版本-->python 2.7.10
      • $python3--version-->Python 3.7.2

      Python 2.6之前的版本也允许使用元组捕获多个异常类型。但语法混乱;你会使用
      除了NameError,ValueError:
      然后想知道为什么
      ValueError
      异常从未被捕获。或者使用了
      ,除了(namererror,e):
      ,并且在
      'e'
      中留下了
      namererror
      !Python 2.6之前的版本也允许使用元组捕获多个异常类型。但语法混乱;你会使用
      除了NameError,ValueError:
      然后想知道为什么
      ValueError
      异常从未被捕获。或者使用了
      ,除了(namererror,e):
      ,并且在
      'e'
      中留下了
      namererror
      !在Python3.x中,将
      用作
      是将异常分配给本地的唯一方法。但是
      as
      不是必需的,因为如果根本不需要它,就不必指定它。在Python 3.x中,使用
      as
      是将异常分配给本地的唯一方法。但是
      as
      不是必需的,因为如果您根本不需要它,就不必指定它。注意:这里有一些特殊情况需要注意。在Py3中,
      as
      目标(以及其余的异常信息)在退出
      except
      块时隐式地
      del
      ed(这可以防止存储的回溯中涉及的一些循环引用延迟内存释放,直到循环GC开始运行)。因此,此等效代码的等效性稍低,除非您在
      except
      块中使用
      try/finally
      ,以确保在退出
      except
      块之前执行
      dele
      。注意:这里有一些特殊情况需要注意。在Py3中,
      as
      目标(以及其余的异常信息)在退出
      except
      块时隐式地
      del
      ed(这可以防止存储的回溯中涉及的一些循环引用延迟内存释放,直到循环GC开始运行)。因此,此等效代码的等效性稍低,除非您在
      except
      块中使用
      try/finally
      ,以确保在退出
      except
      块之前执行
      dele