python - 我应该在定义函数的模块中还是在 Python 中调用函数的模块中定义 try-except ?
问题描述
假设我有以下 2 个模块:
一个.py:
def connect():
bla bla bla..
b.py:
from a import connect
connect()
connect()
我应该为in 模块a
还是定义 try-except 子句b
?
所以
一个.py:
def connect():
try:
bla bla bla..
except:
bla bla bla..
或者
b.py:
from a import connect
try:
connect()
except:
bla bla bla..
?
顺便说一句,我“嵌套”会发生什么try-except
?
一个.py:
def connect():
try:
bla bla bla..
except ValueError:
bla bla bla..
b.py:
from a import connect
try:
connect()
except Exception, e:
bla bla bla..
解决方案
老实说,这取决于您对 try/except 块的期望。如果connect()
运行一些您期望可能会引发 KeyError 的代码,假设因为它假设已填充字典,那么您可能想要捕获它并填充字典:
try:
my_value = my_dict['my_key']
except KeyError:
my_dict = populate_my_dict()
connect()
但是,如果您不希望出现错误connect
但又不想b.py
在发生任何事情时崩溃,您可能想要执行类似的操作
from a import connect
try:
connect()
except StandardError as err:
print("{filename} ran into the following error: {err}".format(filename=__name__, err=err)
永远不要做一个简单的 try/except 块是很重要的,即永远不要except:
按原样使用。捕获您期望的特定错误,否则您最终会导致代码崩溃并在后台运行,从而几乎无法调试。
顺便说一句,我“嵌套”了 try-except 会发生什么?
如果connect()
不抛出 ValueError,则会崩溃,之后异常会通过管道传递到. 由于期待任何(这类似于一个空的 except 块,使用 StandardError 或 UserWarning 代替),异常将被捕获并触发 's except 块的主体。connect()
b.py
b.py
Exception
b.py
推荐阅读
- c - 如何在线程二叉树中开发用于前序和后序遍历的代码?
- php - 无法在 ubuntu 18.04 中更改 php 版本
- r - For-Loop By Columns 与现有的 For-loop by Rows
- javascript - Hammerjs 滑动锁定 Chrome Android 上的 window.innerHeight
- java - Intellij groovy:错误:无法编译 Groovy 文件:没有为模块“groovyTest”定义 Groovy 库
- python - 无法将此 SQL 字符串(带有 VALUES ... AS)转换为 SQLAlchemy 代码
- java - 查找和最小化归并排序算法运行时分析
- java - ImageView 未使用 Picasso 填充 Image Uri
- python - 在 Python 3 中使用 Multiprocessing 库从另一个进程启动进程
- oracle - OBIEE 使用 URL 将参数传递给分析