如何将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:未定义名称"text"

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

推荐答案

try条语句不会创建新的作用域,但如果对url lib.request.urlopen的调用引发异常,则不会设置text.您可能希望在else子句中包含print(text)行,以便仅在没有异常时执行它.

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-3.x相关问答推荐

从日志(log)文件中查找延迟最低的用户

过滤查询集和“Q”运算符的不同值

将字典列表展平为数据框列

机器学习实验笔记本的工作区 url

如何在 django 中没有循环的情况下获得前键的前键?

为什么我不能通过索引获取字典键?

通过 requests 库调用 API 获取访问令牌

使用一周的特定第一天将每日日期转换为每周

Python 3.10 模式匹配 (PEP 634) - 字符串中的通配符

Python 3.9.8 使用 Black 并导入 `typed_ast.ast3` 失败

使用 pip install 下载需求时出错(安装命令:use_2to3 无效.)

为什么 Python 返回 [15] for [0xfor x in (1, 2, 3)]?

FutureWarning:正则表达式的默认值将在future 版本中从 True 更改为 False

matplotlib - 模块“sip”没有属性“setapi”

如何生成满足某些条件的三个随机整数?

如果我将默认设置为无,我可以省略 Optional 吗?

如何使用 Homebrew 在我的 Mac 上默认 Python3.8?

Django 'pip install django-heroku'(psycopg2) 错误阻止部署到 Heroku

安装 PyTorch 1.4 的问题 - “没有找到与 torch===1.4.0 匹配的发行版”

如何提高数据输入管道性能?