当前位置: 首页 > 面试题库 >

如何使try / except块内的变量公开?

越麒
2023-03-14
问题内容

如何在try / except块内将变量设为公共?

import urllib.request

try:
    url = "http://www.google.com"
    page = urllib.request.urlopen(url)
    text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
    print("Unable to process your request dude!!")

print(text)

此代码返回错误

NameError:名称“文本”未定义

如何在try / except块之外使变量文本可用?


问题答案:

try语句不会创建新的作用域,但是text如果调用url lib.request.urlopen引发异常,则不会设置该语句。您可能希望print(text)else子句中使用该行,以便仅在没有异常的情况下才执行该行。

try:
    url = "http://www.google.com"
    page = urllib.request.urlopen(url)
    text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
    print("Unable to process your request dude!!")
else:
    print(text)

如果以后text需要使用,您真的需要考虑如果分配page失败并且您无法致电,其值应该是什么page.read()。您可以在try语句之前给它一个初始值:

text = 'something'
try:
    url = "http://www.google.com"
    page = urllib.request.urlopen(url)
    text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
    print("Unable to process your request dude!!")

print(text)

或在else条款中:

try:
    url = "http://www.google.com"
    page = urllib.request.urlopen(url)
    text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
    print("Unable to process your request dude!!")
else:
    text = 'something'

print(text)


 类似资料:
  • 主要内容:获取特定异常的有关信息Python 中,用 语句块捕获并处理异常,其基本语法结构如下所示: try:     可能产生异常的代码块 except [ (Error1, Error2, ... ) [as e] ]:     处理异常的代码块1 except [ (Error3, Error4, ... ) [as e] ]:     处理异常的代码块2 except  [Exception]:     处理其它异常 该

  • 问题内容: 这是将python“ with”语句与try-except块结合使用的正确方法吗? 如果是这样,请考虑使用旧的处理方式: 这里的“ with”语句的主要好处是我们可以摆脱三行代码吗? 对于这个用例,这 似乎并不吸引我(尽管我知道“ with”语句还有其他用途)。 编辑:以上两个代码块的功能是否相同? EDIT2:前几个答案大体上谈及使用“ with”的好处,但是这里似乎没有什么好处。我

  • Python 异常处理机制还提供了一个 finally 语句,通常用来为 try 块中的程序做扫尾清理工作。 注意,和 else 语句不同,finally 只要求和 try 搭配使用,而至于该结构中是否包含 except 以及 else,对于 finally 不是必须的(else 必须和 try except 搭配使用)。 在整个异常处理机制中, finally 语句的功能是:无论 try 块是否

  • 在原本的 结构的基础上, Python 异常处理机制还提供了一个 else 块,也就是原有 try except 语句的基础上再添加一个 else 块,即 结构。 使用 else 包裹的代码,只有当 try 块没有捕获到任何异常时,才会得到执行;反之,如果 try 块捕获到异常,即便调用对应的 except 处理完异常,else 块中的代码也不会得到执行。 举个例子: 可以看到,在原有 try e

  • 我们尝试读取用户的一段输入。按Ctrl-d,看一下会发生什么。 >>> s = raw_input('Enter something --> ') Enter something --> Traceback (most recent call last):   File "<stdin>", line 1, in ? EOFError Python引发了一个称为EOFError的错误,这个错误基本

  • 问题内容: 我知道,如果我想重新引发异常,我会在相应的块中简单地使用没有参数的方法。但是给定一个嵌套的表达式 如何在不破坏堆栈跟踪的情况下重新筹集?在这种情况下,仅此一项会重新提高最近的筹码。还是我应该重构代码来避免此问题? 问题答案: 从Python 3开始,回溯存储在异常中,因此(大多数)正确的事情很简单: 产生的追溯将包括在处理过程中发生的其他通知(由于位于内部)。这具有误导性,因为实际发生