如何将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相关问答推荐

将Trio与基于线程的事件侦听器混合使用

While循环不停止地等待,直到时间.睡眠结束

如何在 python 中将带有时区信息的时间戳转换为 utc 时间

如何将值映射到具有上限和下限的新列

python3,将整数转换为字节:对于小整数使用 to_bytes() 有哪些替代方法?

在一行中读写一个csv文件

GEKKO 在没有不等式的模型中抛出不等式定义错误

如何在不使用循环的情况下根据另一个数组的索引值将 numpy 数组中不同通道的值设置为零?

Python Regex 查找给定字符串是否遵循交替元音、辅音或辅音、元音的连续模式

Python.在循环中填充字典的问题

两个字符串之间的正则表达式匹配?

如何从字典中打印特定键值?

smtplib 在 Python 3.1 中发送带有 unicode 字符的邮件的问题

使用自定义比较删除重复项

所有 Python dunder 方法的列表 - 您需要实现哪些方法才能正确代理对象?

使用 Tensorflow 2.0 在 MNIST 上实现自定义神经网络?

0 是 0 == 0(#evaluates 为真?)

带有 Emacs 的 Python 3

用 Anaconda 安装了一个包,无法在 Python 中导入

Python:如何在 Windows 资源管理器中打开文件夹(Python 3.6.2、Windows 10)