إدخال سطر الأوامر يسبب Syntaxerror
-
25-09-2019 - |
سؤال
لدي سؤال بسيط في بيثون الذي أتجمد فيه. هذا المقتطف الرمز يعمل. ولكن عندما أقوم باستبدال "258 494-3929" مع عابر ، أحصل على الخطأ التالي أدناه:
# Compare phone number
phone_pattern = '^\d{3} ?\d{3}-\d{4}$'
# phoneNumber = str(input("Please enter a phone number: "))
if re.search(phone_pattern, "258 494-3929"):
print "Pattern matches"
else:
print "Pattern doesn't match!"
Pattern does not match
Please enter a phone number: 258 494-3929
Traceback (most recent call last):
File "pattern_match.py", line 16, in <module>
phoneNumber = str(input("Please enter a phone number: "))
File "<string>", line 1
258 494-3929
^
SyntaxError: invalid syntax
C:\Users\Developer\Documents\PythonDemo>
بالمناسبة ، فعلت import re
وحاولت استخدام rstrip
في حالة \n
ماذا يمكن أن أكون في عداد المفقودين؟
المحلول
يجب أن تستخدم raw_input
بدلاً من input
, ، وليس عليك الاتصال str
, ، لأن هذه الوظيفة تُرجع سلسلة نفسها:
phoneNumber = raw_input("Please enter a phone number: ")
نصائح أخرى
في Python الإصدار 2.x ، يقوم input () بأمرين:
- يقرأ سلسلة من البيانات. (انت تريد هذا.)
- ثم يقوم بتقييم سلسلة البيانات كما لو كانت تعبير بيثون. (هذا الجزء يسبب الخطأ.)
الدالة RAW_INPUT () أفضل في هذا الموقف لأنها تفعل #1 أعلاه ولكن ليس رقم 2.
إذا تغيرت:
input("Please enter a phone number: ")
ليقرأ:
raw_input("Please enter a phone number: ")
ستقوم بإزالة خطأ رقم الهاتف الذي لا يكون تعبيرًا صالحًا للثعبان.
لقد تعثرت وظيفة Input () على الكثير من الأشخاص الذين يتعلمون بيثون ، بدءًا من إصدارات Python 3.x ، قام مصممو اللغة بإزالة خطوة التقييم الإضافية. هذا يجعل الإدخال () في الإصدارات 3.x يتصرف نفس مثل RAW_INPUT () في الإصدارات 2.x.
أنظر أيضا مقالة wikibooks مفيدة.
وظيفة input () في الواقع تقييم المدخلات التي كتبت فيها:
>>> print str(input("input: "))
input: 258238
258238
>>> print str(input("input: "))
input: 3**3 + 4
31
إنه يحاول تقييم "258 494-3929" وهو بيثون غير صالح.
يستخدم sys.stdin.readline().strip()
للقيام بقراءتك.
input()
المكالمات eval(raw_input(prompt))
, ، لذلك تريد phoneNumber = raw_input("Please enter a phone number: ").strip()
أنظر أيضا http://docs.python.org/library/functions.html#input و http://docs.python.org/library/functions.html#raw_input