作者回复: 这里需要考虑两个问题:1选择什么db?2在哪里执行插入db。
1 选择不同的db需要使用不同的函数库,如果是实验可以考虑使用redis,操作和实验起来很简单,把插入db封装成一个函数
2 在哪里调用呢?你可以找到retry的官方网站,会发现retry库有一种装饰器模式,也有一种使用retry_call的函数模式,但都不能直接写库,所以找到retry函数库的github,发现代码里面有except Exception as e:
可以在这里添加你的函数。
这是实现原理,看看你能否想到更优雅的实现方式呢?
作者回复: 使用
except:
写法就可以匹配其他异常了,但是建议写成except Exception as e:
的形式,可以通过对e的输出了解具体产生的是哪种异常。
作者回复: 按照演示,如果open( )打开的文件不存在,是会直接被except捕获的,因此为变量赋值的语句不会执行,也就是finally的提示,变量未定义了。
这是except捕获异常的正常流程,那要想解决打开文件不存在的方法怎么做呢,最常见的两种办法是:第一种是用open('文件名','a+')方式,使用a+属性,如果打开的文件不存在就自动创建文件;
另一种规范的方法是打开文件之前通过os等系统相关的模块判断文件是否存在,还要判断存在的名称是文件还是文件夹,即:
os.path.isfile('文件路径/文件名称')
作者回复: except Exception 是捕获所有的异常,输出是不会输出异常类的,只会输出异常的属性。
作者回复: 您好,方便提供一下 操作系统和python的版本信息吗?
如 windows7 python3.6
我在windows10 python3.7 和mac下没有复现出您的问题。
如果您在PyCharm环境下运行,尝试重新创建一个新的.py文件运行,并观察一下右下角文件的编码是否为utf8,如果是其他编码可以点击进行修改,看看这样能否解决您的问题。
作者回复: 这也是一个办法,但是判断的不完善,比如路径存在但是是个文件夹呢?所以通常我们会判断文件路径是否存在是否为文件,如果是文件或者文件不存在,则在目录下用a+模式打开(open)这个文件
作者回复: 1 raise 引发的异常,每次只能引发一个异常实例
2 程序自动引发的异常可以用try except 结构捕获,raise是开发者手动引发的异常,如:
1>0 在程序一般逻辑中不会出现异常,一旦程序逻辑需要,就要手动触发异常--即显式引发异常
try:
must_be_int = 1
if must_be_int > 0 :
raise ValueError("输入的变量大于0")
except Exception as e:
print("raise抛出的信息",e)
作者回复: 网上的说法不正确,两种办法解决
1 开头增加 # -*-coding:utf8 -*- ,让python将这个文件当做utf-8字符集来处理
2 在pycharm 右下角有个真正的文件编码,改为utf-8 重新加载这个文件
作者回复: 您好, try 和except 一定要一对一的使用,如果需要捕获多个异常一定要把他们进行嵌套使用,不能叠加。可以这样使用:
try:
try:
raise SyntaxError
except IndexError:
print('Error demo')
except SyntaxError:
print('Error demo2')
作者回复: raise 是抛出一个自定义的异常;python自己定义了一套标准异常,出现问题就抛出来,要不要解决由编写代码的人来决定。当你在自己的业务逻辑也想用这种方式处理问题时,不用再开发一套异常处理框架,直接使用raise抛出你想要产生的异常,并且用来捕获处理就可以了。
作者回复: 用with open() 方式,不用自己编写,Python已经实现了这个功能了
作者回复: 你要实现哪些功能呢?
作者回复: 把finally放在另一个try结构里面
try:
try:
'a' + 1
except:
print('exception1')
finally:
print('最后一口气')
'a' + 2
except:
print('exception2')
注意缩进