В python, какой самый быстрый способ определить, является ли строка электронным письмом или целым числом? - PullRequest
1 голос
/ 30 марта 2010

Я бы хотел иметь возможность извлекать пользователей из базы данных, используя предоставленный адрес электронной почты или идентификатор пользователя (целое число). Чтобы сделать это, я должен определить, является ли предоставленная строка целым числом или электронным письмом. Ищете самый быстрый способ сделать это. Спасибо.

def __init__(self, data):
    #populate class data
    self._fetchInfo(data)


def _fetchInfo(self, data):
    #If an email
        #SELECT ... WHERE email = 'data'
    #or if a user_id
        #SELECT ... WHERE id = 'data'

    #Fill class attributes 
    self._id = row['id']
    self._email = row['id']
    ...

Ответы [ 4 ]

4 голосов
/ 30 марта 2010

Канонический способ справиться с этим в Python - сначала попробовать, потом попросить прощения:

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

Эта стратегия также гласит прозвище «Просить прощения легче, чем разрешение» .

2 голосов
/ 30 марта 2010

Вы сказали, что оба были струнами, верно? Это тоже сработает.

if data.isdigit():
    # it's an id
else:
    # it's not
2 голосов
/ 30 марта 2010

Вы можете использовать функцию isinstance :

if isinstance(data, int):
   # it's an id
else:
   # it's a string

Хотя лично у меня было бы два метода, fetchById и fetchByEmail, чтобы было понятно, как это работает.

1 голос
/ 30 марта 2010
if '@' in data:
    # email
else:
    # id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...