现在,我在except Exception:
条款中捕获了异常,并且做了print(exception)
.结果不提供任何信息,因为它始终打印
.我知道这曾经在python 2中工作,但我如何在python3中做到这一点?
我猜你需要将Exception
变量分配给变量.如Python 3教程中所示:
def fails(): x = 1 / 0 try: fails() except Exception as ex: print(ex)
简要说明as
是在某些复合语句中使用的伪赋值关键字,用于将前一个语句赋值给变量或将其别名.
在这种情况下,as
将捕获的异常分配给变量,以允许稍后存储和使用的有关异常的信息,而不是需要立即处理.(这在Python 3语言参考:try
声明中有详细讨论.)
使用的另一个复合语句as
是with
声明:
@contextmanager def opening(filename): f = open(filename) try: yield f finally: f.close() with opening(filename) as f: # ...read data from f...
这里,with
语句用于使用上下文管理器定义的方法包装块的执行.它的功能类似于try...except...finally
整齐的生成器包中的扩展语句,并且as
语句将生成器生成的结果从上下文管理器分配给变量以供扩展使用.(这在Python 3语言参考:with
声明中有详细讨论.)
最后,as
可以在导入模块时使用,将模块别名为不同的(通常更短的)名称:
import foo.bar.baz as fbb
这在Python 3语言参考:import
声明中有详细讨论.
这些是自python 2以来的变化:
try:
1 / 0
except Exception as e: # (as opposed to except Exception, e:)
# ^ that will just look for two classes, Exception and e
# for the repr
print(repr(e))
# for just the message, or str(e), since print calls str under the hood
print(e)
# the arguments that the exception has been called with.
# the first one is usually the message. (OSError is different, though)
print(e.args)
尝试
except Exception as e: print(e)