[英]Get a row of a pandas DataFrame as a dict-like object with correct types
[英]How to implement dict-like `get` method?
我有自己的數據結構,我想實現mystructure.get(id)
它在dict
中的工作方式。
如果沒有傳遞default
參數,它應該引發self.NotFound
異常。 問題是我無法判斷default
是否已被省略或None
是否已通過。
如果沒有id==48
的 object
mystructure.get(48)
應該提出NotFound
mystructure.get(48, default=None)
應該返回None
你知道如何區分這兩者嗎?
class MyStructure:
...
def get(self, _id, default=None):
...
我想到的唯一一件事(而且很臟):
def get(self, _id, default="173095fb-da18-4bab-b943-2f51c327f7cb"):
..._id not found in this structure...
if default=="173095fb-da18-4bab-b943-2f51c327f7cb":
raise self.NotFound
return default
您可以通過生成自己獨特的 object 並使用它而不是None
作為默認參數值來做到這一點。
class MyStructure:
NUL = object()
class NotFound(Exception): pass
def get(self, _id, default=NUL):
if default is self.NUL:
raise self.NotFound(f'{_id=}')
print('OK')
inst = MyStructure()
inst.get(13, None) # -> OK
inst.get(42, -1) # -> OK
inst.get(48) # -> __main__.NotFound: _id=48
評論
當具有默認值的參數被忽略時,引發“未找到”錯誤似乎並不奇怪。 如果不能省略,為什么還要提供默認值?
您還可以分配一個簡單的錯誤字符串,如果None
沒有傳遞給它,則引發錯誤......像這樣
def get(self, key, default = "Not Found"):
if default is not None:
raise self.NotFound(f'{key}')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.