I'd like to be able to pull users from a database using either a supplied e-mail address or the user id (an integer). To do this, I have to detect if the supplied string is an integer, or an e-mail. Looking for the fastest way to do this. Thanks.
def __init__(self, data):
    #populate class data
    self._fetchInfo(data)
def _fetchInfo(self, data):
    #If an email
        #SELECT ... WHERE em开发者_运维百科ail = 'data'
    #or if a user_id
        #SELECT ... WHERE id = 'data'
    #Fill class attributes 
    self._id = row['id']
    self._email = row['id']
    ...
The canonical way to handle this in Python is to try first, ask forgiveness later:
def _fetchInfo(self, data):
    try:
        data=int(data)
        sql='SELECT ... WHERE id = %s'
        args=[data]
    except ValueError:
        sql='SELECT ... WHERE email = %s'
        args=[data]
        # This might fail, in which case, data was neither a valid integer or email address
This strategy also goes by the moniker "It is Easier to Ask for Forgiveness than Permission".
You can use the isinstance function:
if isinstance(data, int):
   # it's an id
else:
   # it's a string
Though personally, I'd just have two methods, fetchById and fetchByEmail to make it clear that's how it works.
You said both were strings, right? This would work, too.
if data.isdigit():
    # it's an id
else:
    # it's not
if '@' in data:
    # email
else:
    # id
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论