Mis*_*ate 5 python algorithm firebase-realtime-database
我有一个带有Firebase数据库后端的Python应用程序.
当我从数据库中检索数据时,我想检查这些值是否可用(如果没有,这意味着数据库以某种方式被破坏,因为缺少强制字段)
我目前的实施如下:
self.foo = myDbRef.get('foo')
self.bar = myDbRef.get('bar')
self.bip = myDbRef.get('bip')
self.plop = myDbRef.get('plop')
if self.foo is None or self.bar is None or self.bip is None or self.plop is None:
self.isValid = False
return ErrorCode.CORRUPTED_DATABASE
Run Code Online (Sandbox Code Playgroud)
这工作正常,紧凑,但有一个主要问题:我将获得数据库已损坏的信息,但不会丢失哪些字段(可能只是其中之一,或更多,或全部!)
惯用法应该是
if self.foo is None:
self.isValid = False
return ErrorCode.CORRUPTED_DATABASE, "FOO IS MISSING" # could be a string, an enum value, whatever, I have the information
if self.bar is None:
self.isValid = False
return ErrorCode.CORRUPTED_DATABASE, "BAR IS MISSING"
if self.bip is None:
self.isValid = False
return ErrorCode.CORRUPTED_DATABASE, "BIP IS MISSING"
Run Code Online (Sandbox Code Playgroud)
但这并不漂亮,没有分解(所有我的'来自db'函数的init都使用相同的模式......我不想在这种情况下将我的行数乘以10倍).
这不是一个'100%python'的问题,但是我希望这句话能让我像老板一样处理这个问题(它的蟒蛇:通常会这样!)
您可以将检查提取到生成器中,并将标志和return语句留在外面。
def invalid_fields():
if self.foo is None: yield "FOO"
if self.bar is None: yield "BAR"
if self.bip is None: yield "BIP"
invalid = list(invalid_fields())
if invalid:
self.isValid = False
return ErrorCode.CORRUPTED_DATABASE, "MISSING {}".format(", ".join(invalid))
Run Code Online (Sandbox Code Playgroud)
这样做的好处是,如果有多个字段,可以告诉您所有缺失的字段。
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |